Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.87 KB | None | 0 0
  1. Zadanie: dodatkowe operacje na listach
  2. Stworzyć klasę XList, dostarczającą dodatkowych możliwości tworzenia list i operowania na nich.
  3. W klasie powinny znaleźć się odpowiednie konstruktory oraz statyczne metody of, umożliwiające tworzenie obiektów XList z innych kolekcji, tablic oraz argumentów podawanych przez przecinki.
  4. Dodatkowo pomocnicze metody do tworzenia xlist z napisów:
  5. ofChars(napis) - zwraca x-listę znaków napisu,
  6. ofTokens(napis, [ sep ]) - zwraca x-listę symboli napisu, rozdzielonych separatorami z sep (jesśi brak - to białymi znakami).
  7. Oprócz tego dostarczyć metod:
  8. union(dowolna_kolekcja) - zwraca nową x-list z dołączaną do tej x-list zawartością kolekcji,
  9. diff(dowolna_kolekcja) - zwraca x-list zawierającą te elementy tej x-list, które nie występują w kolekcji,
  10. unique() - zwraca nową x-list, która zawiera wszystkie niepowtarzające się elementy tej x-list
  11. combine() - zwraca x-listę list-kombinacji elementów z poszczególnych kolekcji, będących elementami tej x-listy
  12. collect(Function) - zwraca nową x-listę, której elemenatmi są wyniki funkcji stosowanej wobec elementów tej x-listy,
  13. join([sep]) - zwraca napis, będący połączeniem elementów tej x-listy, z ewentualnie wstawionym pomiędzy nie separatorem,
  14. forEachWithIndex(konsumer_z_dwoma argumentami: element, index) - do iterowania po liście z dostępem i do elementów i do ich indeksów.
  15.  
  16. Za realizację każdej z w/w właściwosci uzyskuje się odrębne punkty, tak że można wykonac tylko część zadania.
  17. Przy tym należy jednak uważać, aby przekazany w rozwiązaniu plik Main.java nie miał błędów w kompilacji.
  18.  
  19. Klasa Main zawarta w projekcie powinna dobrze wyjaśniać sposób realizacji zadania:
  20. import java.util.*;
  21.  
  22. // Plik Main.java może być dowolnie modyfikowany,
  23. // ale punkty uzyskuje się za właściwe dzialanie poszczególnych pokazanych tu metod klasy XList.
  24.  
  25. // Jeżeli nie oprogramujemy wszystkich metod, to z klasy Main nalezy usunąć te fragmenty,
  26. // które powodują błędy w kompilacji - w przeciwnym razie nie uzyskamy punktów.
  27.  
  28. public class Main {
  29. public static void main(String[] args) {
  30. // Pewne dodatkowe zestawy danych
  31. Integer[] ints = { 100, 200, 300 };
  32. Set<Integer> set = new HashSet<>(Arrays.asList(3, 4, 5));
  33.  
  34. // Sposoby tworzenia
  35. XList<Integer> list1 = new XList<>(1, 3, 9, 11);
  36. XList<Integer> list2 = XList.of(5, 6, 9);
  37. XList<Integer> list3 = new XList(ints);
  38. XList<Integer> list4 = XList.of(ints);
  39. XList<Integer> list5 = new XList(set);
  40. XList<Integer> list6 = XList.of(set);
  41.  
  42. System.out.println(list1);
  43. System.out.println(list2);
  44. System.out.println(list3);
  45. System.out.println(list4);
  46. System.out.println(list5);
  47. System.out.println(list6);
  48.  
  49. // --- i pomocnicze metody do tworzenia z napisów
  50. XList<String> slist1 = XList.charsOf("ala ma kota");
  51. XList<String> slist2 = XList.tokensOf("ala ma kota");
  52. XList<String> slist3 = XList.tokensOf("A-B-C", "-");
  53.  
  54. System.out.println(slist1);
  55. System.out.println(slist2);
  56. System.out.println(slist3);
  57.  
  58. // Metoda union - suma elementów
  59. List<Integer> m1 = list1.union(list2); // oczywiście, można podstawiać na List
  60. System.out.println(m1);
  61. // można wykonywać wszystkie operacje z interfejsu List, np:
  62. m1.add(11);
  63. System.out.println(m1);
  64. XList<Integer> m2 = (XList<Integer>) m1;
  65. XList<Integer> m3 = m2.union(ints).union(XList.of(4, 4));
  66. System.out.println(m2); // m2 się nie zmienia
  67. System.out.println(m3); // wynik jest w m3
  68. m3 = m3.union(set);
  69. System.out.println(m3);
  70.  
  71. // Widzieliśmy metode union
  72. // Teraz metoda diff(dowolna kolekcja)
  73. System.out.println(m3.diff(set)); // wszystko z m3, co nie jest w set
  74. System.out.println(XList.of(set).diff(m3)); // co jest w set, czego nie ma w m3
  75.  
  76. // Metoda unique -zwraca nową Xlist bez duplikatow
  77. XList<Integer> uniq = m3.unique(); // lista, nie Set
  78. System.out.println(uniq);
  79.  
  80. // kombinacje (kolejność jest istotna)
  81. List<String> sa = Arrays.asList( "a", "b");
  82. List<String> sb = Arrays.asList( "X", "Y", "Z" );
  83. XList<String> sc = XList.charsOf( "12" );
  84. XList toCombine = XList.of(sa, sb, sc); // czy można tu uniknąć użycia typu surowego?
  85. System.out.println(toCombine);
  86. XList<XList<String>> cres = toCombine.combine();
  87. System.out.println(cres);
  88.  
  89. // collect i join
  90. XList<String> j1 = cres.collect( list -> list.join());
  91. System.out.println(j1.join(" "));
  92. XList<String> j2 =cres.collect( list -> list.join("-"));
  93. System.out.println(j2.join(" "));
  94.  
  95. // forEachWithIndex
  96. XList<Integer> lmod = XList.of(1,2,8, 10, 11, 30, 3, 4);
  97. lmod.forEachWithIndex( (e, i) -> lmod.set(i, e*2));
  98. System.out.println(lmod);
  99. lmod.forEachWithIndex( (e, i) -> { if (i % 2 == 0) lmod.remove(e); } );
  100. System.out.println(lmod);
  101. lmod.forEachWithIndex( (e, i) -> { if (i % 2 == 0) lmod.remove(i); } );
  102. System.out.println(lmod); // Pytanie: dlaczego mamy taki efekt?
  103.  
  104. }
  105. }
  106. Ten program wypisuje na konsoli:
  107.  
  108. [1, 3, 9, 11]
  109. [5, 6, 9]
  110. [100, 200, 300]
  111. [100, 200, 300]
  112. [3, 4, 5]
  113. [3, 4, 5]
  114. [a, l, a, , m, a, , k, o, t, a]
  115. [ala, ma, kota]
  116. [A, B, C]
  117. [1, 3, 9, 11, 5, 6, 9]
  118. [1, 3, 9, 11, 5, 6, 9, 11]
  119. [1, 3, 9, 11, 5, 6, 9, 11]
  120. [1, 3, 9, 11, 5, 6, 9, 11, 100, 200, 300, 4, 4]
  121. [1, 3, 9, 11, 5, 6, 9, 11, 100, 200, 300, 4, 4, 3, 4, 5]
  122. [1, 9, 11, 6, 9, 11, 100, 200, 300]
  123. []
  124. [1, 3, 9, 11, 5, 6, 100, 200, 300, 4]
  125. [[a, b], [X, Y, Z], [1, 2]]
  126. [[a, X, 1], [b, X, 1], [a, Y, 1], [b, Y, 1], [a, Z, 1], [b, Z, 1], [a, X, 2], [b, X, 2], [a, Y, 2], [b, Y, 2], [a, Z, 2], [b, Z, 2]]
  127. aX1 bX1 aY1 bY1 aZ1 bZ1 aX2 bX2 aY2 bY2 aZ2 bZ2
  128. a-X-1 b-X-1 a-Y-1 b-Y-1 a-Z-1 b-Z-1 a-X-2 b-X-2 a-Y-2 b-Y-2 a-Z-2 b-Z-2
  129. [2, 4, 16, 20, 22, 60, 6, 8]
  130. [4, 16, 22, 60, 8]
  131. [16, 22, 60, 8]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement