A CollectionUtils bemutatása
Egy másik általános segédprogram, amely számos hasznos módszert tartalmaz:
addAll(Gyűjtemény<C> gyűjtemény, C...elemek) | A C tömb összes elemét hozzáadja a gyűjteményhez |
addIgnoreNull(gyűjtemény<T> gyűjtemény, T objektum) | Hozzáad egy elemet, ha az nem null |
tartalmazzaMindent(gyűjtemény<?> gyűjtemény1, gyűjtemény<?> gyűjtemény2) | Ellenőrzi, hogy a collection1 tartalmazza-e a collection2 összes elemét |
tartalmazzaAny(gyűjtemény<?> gyűjtemény1, gyűjtemény<?> gyűjtemény2) | Ellenőrzi, hogy a gyűjtemény1 tartalmaz-e legalább egy elemet a 2. gyűjteményből |
countMatches (Iterálható<C> bemenet, Predikátum<? Super C> predikátum) | Megszámolja, hogy egy gyűjtemény hány eleme felel meg egy predikátumszabálynak |
diszjunkció (Iterálható<? kiterjeszti O> a, Iterable<? kiterjeszti O> b) | Olyan objektumokat ad vissza, amelyek csak egy gyűjteményben vannak, de nem mindkettőben |
metszéspont(Iterálható<? kiterjeszti O> a, Iterálható<? kiterjeszti O> b) | Olyan objektumok gyűjteményét adja vissza, amelyek egyszerre mindkét gyűjtemény részét képezik |
union(Iterálható<? kiterjeszti O> a, Iterable<? kiterjeszti O> b) | Olyan objektumok gyűjteményét adja vissza, amelyek legalább egy gyűjtemény részét képezik |
üres gyűjtemény() | Egy különleges üres gyűjteményt ad vissza |
emptyIfNull(gyűjtemény<T> gyűjtemény) | Üres gyűjteményt ad vissza, ha a gyűjtemény == null |
létezik (Iterálható<C> bemenet, Predikátum<? szuper C> predikátum) | Ellenőrzi, hogy van-e olyan elem a gyűjteményben, amely megfelel az állítmányszabálynak |
kivonatSingleton(gyűjtemény<E> gyűjtemény) | A gyűjtemény egyetlen elemét adja vissza |
szűrő (Iterálható<T> gyűjtemény, Predikátum<? szuper T> predikátum) | Szűri a gyűjtemény elemeit |
find(Iterálható<T> gyűjtemény, Predikátum<? szuper T> predikátum) | Egy gyűjtemény elemeit keresem |
isEmpty(Gyűjtemény<?> kollekció) | Ellenőrzi, hogy a gyűjtemény üres-e |
isEqualCollection(gyűjtemény<?> a, gyűjtemény<?> b) | Összehasonlítja a gyűjteményeket |
isFull(Gyűjtemény<? kiterjeszti az Object> coll) | Ellenőrzi, hogy egy elem hozzáadható-e még a gyűjteményhez |
isNotEmpty(Gyűjtemény<?> kollekció) | Ellenőrizze, hogy a gyűjtemény nem üres-e |
isSubCollection(gyűjtemény<?> a, gyűjtemény<?> b) | Ellenőrzi, hogy a B gyűjtemény az A gyűjteményben van-e |
matchesAll(Iterable<C> bemenet, Predikátum<? Super C> predikátum) | Ellenőrzi, hogy egy gyűjtemény minden eleme megfelel-e egy predikátumszabálynak |
RemoveAll(Gyűjtemény<E> gyűjtemény, Gyűjtemény<?> eltávolítás) | Eltávolítja a gyűjtemény összes elemét |
megtartaniAll(gyűjtemény<C> gyűjtemény, gyűjtemény<?> megtartása) | Egy gyűjteményt ad vissza, amely tartalmazza a gyűjtemény összes elemét, amely szintén szerepel a megtartásban |
reverseArray(Object[] tömb) | Visszafelé fordít egy tömböt |
unmodifiableCollection(A gyűjtemény<? kiterjeszti a C> gyűjteményt) | Burkolatot ad vissza a gyűjteményre. A gyűjtemény módosítására tett kísérlet kivételt jelent. |
Nézzünk néhány módszert.
A gyűjtemény ürességének ellenőrzésének módjai
Így könnyen megállapítható, hogy egy gyűjtemény üres-e:
CollectionUtils.isEmpty(null); // true
CollectionUtils.isEmpty(new LinkedList<>()); // true
CollectionUtils.isEmpty(Collections.singleton(new int[]{2, 1})); // false
Ugyanilyen egyszerű ellenőrizni, hogy egy gyűjtemény nem üres-e:
CollectionUtils.isNotEmpty(null); // false
CollectionUtils.isNotEmpty(new LinkedList<>()); // false
CollectionUtils.isNotEmpty(Collections.singleton(new int[]{2, 1})); // true
Példák:
User ivan = new User("Ivan", "ivan@email.com");
User petr = new User("Petr", "petr@email.com");
List<User> users = new ArrayList<>();
System.out.println(CollectionUtils.isEmpty(users)); // true
System.out.println(CollectionUtils.isNotEmpty(users)); // false
users.add(ivan);
users.add(petr);
System.out.println(CollectionUtils.isEmpty(users)); // false
System.out.println(CollectionUtils.isNotEmpty(users)); // true
users = null;
System.out.println(CollectionUtils.isEmpty(users)); // true
System.out.println(CollectionUtils.isNotEmpty(users)); // false
Útmutató az Apache Commons Collections CollectionUtils-hez
Műveletek a készleteken
Ha halmazelmélettel kellett foglalkoznia, akkor tudja, hogy a halmazokon 4 alapművelet létezik: egyesülés, metszés, különbség és diszjunkció.
Ezekhez a műveletekhez a CollectionUtils osztály 4 metódussal rendelkezik:
- unió()
- útkereszteződés()
- diszjunkció ()
- kivon()
Íme néhány egyszerű példa:
Egy egyesület
List<String> firstList = Arrays.asList("1", "2", "3", "4", "5", "6");
List<String> secondList = Arrays.asList("2", "3", "6", "7", "8", "9");
//combine two sets
Collection<String> result = CollectionUtils.union(firstList, secondList);
System.out.println(ArrayUtils.toString(result)); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
útkereszteződés
List<String> firstList = Arrays.asList("A", "B", "C", "D", "E", "F");
List<String> secondList = Arrays.asList("B", "D", "F", "G", "H", "K");
//intersections of two sets
Collection<String> result = CollectionUtils.intersection(firstList, secondList);
System.out.println(ArrayUtils.toString(result)); //[B, D, F]
Diszjunkció
List<String> firstList = Arrays.asList("1", "2", "3", "4", "5", "6");
List<String> secondList = Arrays.asList("2", "3", "6", "7", "8", "9");
//disjunction
Collection<String> result = CollectionUtils.disjunction(firstList, secondList);
System.out.println(ArrayUtils.toString(result)); //[1, 4, 5, 7, 8, 9]
Különbség (levonás)
List<String> firstList = Arrays.asList("1", "2", "3", "4", "5", "6");
List<String> secondList = Arrays.asList("2", "3", "6", "7", "8", "9");
//difference
Collection<String> result = CollectionUtils.subtract(firstList, secondList);
System.out.println(ArrayUtils.toString(result)); // [1, 4, 5]
Műveletek a díszleteken, folytatódott
Ez a példa bemutatja, hogyan használhatja a fenti négy módszert két gyűjtemény kezelésére:
List<Integer> firstList = Arrays.asList(1, 2, 3, 3, 4, 5);
List<Integer> secondList = Arrays.asList(3, 4, 4, 5, 6, 7);
Collection<Integer> union = CollectionUtils.union(firstList, secondList); // An association
Collection<Integer> intersection = CollectionUtils.intersection(firstList, secondList); // Intersection
Collection<Integer> disjunction = CollectionUtils.disjunction(firstList, secondList); // disjunction
Collection<Integer> subtract = CollectionUtils.subtract(firstList, secondList); // Difference
System.out.println("firstList: " + ArrayUtils.toString(firstList.toArray()));
System.out.println("secondList: " + ArrayUtils.toString(secondList.toArray()));
System.out.println("An association: " + ArrayUtils.toString(union.toArray()));
System.out.println("Intersection: " + ArrayUtils.toString(intersection.toArray()));
System.out.println("Disjunction: " + ArrayUtils.toString(disjunction.toArray()));
System.out.println("Difference: " + ArrayUtils.toString(subtract.toArray()));
Eredményünk:
firstList: {1,2,3,3,4,5}
secondList: {3,4,4,5,6,7}
An association: {1,2,3,3,4,4,5,6,7}
intersection: {3,4,5}
Disjunction: {1,2,3,4,6,7}
Difference: {1,2,3}
Ezekkel a módszerekkel egyedül is kísérletezhet.
unmodifiableCollection() metódus
Néha olyan interfész-módszereket kell megvalósítanunk, amelyeknek vissza kell adniuk az objektumaink belső adatainak gyűjteményeit. És mivel az adatok belsőek, nem szeretnénk, ha bárki megváltoztatná valahol.
Vagy kaptunk valahol egy olyan gyűjteményt, amelyet nem kell megváltoztatni, de kénytelenek átadni valamilyen harmadik fél módszerének. Hol a garancia, hogy nem változtat?
A nyugodt alvás érdekében a kollekciót be lehet csomagolni egy speciális csomagolásba, amely kivételt jelent, amikor megpróbálja módosítani a kollekciót.
Példa:
Collection<String> firstCollection = new ArrayList<String>();
Collection<String> secondCollection = Collections.unmodifiableCollection(firstCollection);
firstCollection.add("hello");
firstCollection.add("from");
firstCollection.add("codeGym");
//secondCollection.add("have a error");
System.out.println(secondCollection); //[hello, from, codeGym]
A Collections.unmodifiableCollection() metódus egy burkolót ad vissza a neki átadott gyűjtemény felett. Ha meghívod a get() , size() metódusait , akkor minden működni fog. Az add() , set() , remove() metódusok meghívásakor azonban kivételt kapunk.
java.lang.UnsupportedOperationException
at org.apache.commons.collections.collection.UnmodifiableCollection.add(UnmodifiableCollection.java:75)
Valójában a metódus már elavultként van megjelölve, és javasolt helyette a Collections.unmodifiableCollection(Collection<? extends T> c) használata .
Collection<String> firstCollection = new ArrayList<String>();
Collection<String> secondCollection =
Collections.unmodifiableCollection(firstCollection);
GO TO FULL VERSION