Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package zad1;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Iterator;
- import java.util.List;
- public class XList<T> implements Collection<T>{
- List<T> insideList;
- public XList(Collection<T> inCol){
- insideList = new ArrayList<T>();
- for (T elem : inCol) insideList.add(elem);
- }
- public XList(T... args){
- insideList = new ArrayList<T>();
- for (T elem : args) insideList.add(elem);
- }
- public static<T> XList<T> of(T... args){
- return new XList<T>(args);
- }
- public static<T> XList<T> of(Collection<T> coll){
- return new XList<T>(coll);
- }
- public static XList<String>charsOf(String s){
- List<String> list = new ArrayList<String>();
- for(char c : s.toCharArray()){
- list.add(String.valueOf(c));
- }
- return new XList<String>(list);
- }
- public static XList<String> tokensOf(String s){
- return tokensOf(s, "( )|(\t)|(\r)|(\n)");
- }
- public static XList<String> tokensOf(String s, String separator){
- return new XList<String>(s.split(separator));
- }
- public XList<T> union(Collection<T> coll){
- List<T> toUnite = new ArrayList<T>(coll);
- toUnite = insideList;
- for(T elem : coll){
- toUnite.add(elem);
- }
- return new XList<T>(toUnite);
- }
- @Override
- public String toString() {
- String toReturn = "[";
- for (int i=0; i<insideList.size(); i++ ){
- toReturn = toReturn+insideList.get(i);
- if(i < insideList.size()-1)
- toReturn = toReturn + ",";
- }
- toReturn=toReturn+"]";
- return toReturn;
- }
- @Override
- public int size() {
- return 0;
- }
- @Override
- public boolean isEmpty() {
- return false;
- }
- @Override
- public boolean contains(Object o) {
- return false;
- }
- @Override
- public Iterator<T> iterator() {
- return null;
- }
- @Override
- public Object[] toArray() {
- return new Object[0];
- }
- @Override
- public <T1> T1[] toArray(T1[] a) {
- return null;
- }
- @Override
- public boolean add(T t) {
- return false;
- }
- @Override
- public boolean remove(Object o) {
- return false;
- }
- @Override
- public boolean containsAll(Collection<?> c) {
- return false;
- }
- @Override
- public boolean addAll(Collection<? extends T> c) {
- return false;
- }
- @Override
- public boolean removeAll(Collection<?> c) {
- return false;
- }
- @Override
- public boolean retainAll(Collection<?> c) {
- return false;
- }
- @Override
- public void clear() {
- }
- }
- /**
- *
- * @author Bany Jan S16103
- *
- */
- package zad1;
- import java.util.*;
- // Plik Main.java może być dowolnie modyfikowany,
- // ale punkty uzyskuje się za właściwe dzialanie poszczególnych pokazanych tu metod klasy XList.
- // Jeżeli nie oprogramujemy wszystkich metod, to z klasy Main nalezy usunąć te fragmenty,
- // które powodują błędy w kompilacji - w przeciwnym razie nie uzyskamy punktów.
- public class Main {
- public static void main(String[] args) {
- // Pewne dodatkowe zestawy danych
- Integer[] ints = { 100, 200, 300 };
- Set<Integer> set = new HashSet<>(Arrays.asList(3, 4, 5));
- // Sposoby tworzenia
- XList<Integer> list1 = new XList<>(1, 3, 9, 11);
- XList<Integer> list2 = XList.of(5, 6, 9);
- XList<Integer> list3 = new XList(ints);
- XList<Integer> list4 = XList.of(ints);
- XList<Integer> list5 = new XList(set);
- XList<Integer> list6 = XList.of(set);
- System.out.println(list1);
- System.out.println(list2);
- System.out.println(list3);
- System.out.println(list4);
- System.out.println(list5);
- System.out.println(list6);
- // --- i pomocnicze metody do tworzenia z napisów
- XList<String> slist1 = XList.charsOf("ala ma kota");
- XList<String> slist2 = XList.tokensOf("ala ma kota");
- XList<String> slist3 = XList.tokensOf("A-B-C", "-");
- System.out.println(slist1);
- System.out.println(slist2);
- System.out.println(slist3);
- // Metoda union - suma elementów
- List<Integer> m1 = list1.union(list2); // oczywiście, można podstawiać na List
- System.out.println(m1);
- // można wykonywać wszystkie operacje z interfejsu List, np:
- /*m1.add(11);
- System.out.println(m1);
- XList<Integer> m2 = (XList<Integer>) m1;
- XList<Integer> m3 = m2.union(ints).union(XList.of(4, 4));
- System.out.println(m2); // m2 się nie zmienia
- System.out.println(m3); // wynik jest w m3
- m3 = m3.union(set);
- System.out.println(m3);
- // Widzieliśmy metode union
- // Teraz metoda diff(dowolna kolekcja)
- System.out.println(m3.diff(set)); // wszystko z m3, co nie jest w set
- System.out.println(XList.of(set).diff(m3)); // co jest w set, czego nie ma w m3
- // Metoda unique -zwraca nową Xlist bez duplikatow
- XList<Integer> uniq = m3.unique(); // lista, nie Set
- System.out.println(uniq);
- // kombinacje (kolejność jest istotna)
- List<String> sa = Arrays.asList( "a", "b");
- List<String> sb = Arrays.asList( "X", "Y", "Z" );
- XList<String> sc = XList.charsOf( "12" );
- XList toCombine = XList.of(sa, sb, sc);
- System.out.println(toCombine);
- XList<XList<String>> cres = toCombine.combine();
- System.out.println(cres);
- // collect i join
- XList<String> j1 = cres.collect( list -> list.join());
- System.out.println(j1.join(" "));
- XList<String> j2 =cres.collect( list -> list.join("-"));
- System.out.println(j2.join(" "));
- // forEachWithIndex
- XList<Integer> lmod = XList.of(1,2,8, 10, 11, 30, 3, 4);
- lmod.forEachWithIndex( (e, i) -> lmod.set(i, e*2));
- System.out.println(lmod);
- lmod.forEachWithIndex( (e, i) -> { if (i % 2 == 0) lmod.remove(e); } );
- System.out.println(lmod);
- lmod.forEachWithIndex( (e, i) -> { if (i % 2 == 0) lmod.remove(i); } );
- System.out.println(lmod); // Pytanie: dlaczego mamy taki efekt? */
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement