Pambuka kanggo CollectionUtils

Kelas utilitas umum liyane sing ngemot akeh cara migunani:

addAll(Koleksi<C> koleksi, C...elemen) Nambahake kabeh unsur array C menyang koleksi
addIgnoreNull(Koleksi <T> koleksi, objek T) Nambah unsur yen ora null
ngandhutKabeh(Koleksi<?> coll1, Koleksi<?> coll2) Priksa manawa koleksi1 ngemot kabeh unsur koleksi2
ngandhut Any(Koleksi<?> coll1, Koleksi<?> coll2) Priksa manawa koleksi1 ngemot paling ora siji unsur saka koleksi2
countMatches(Iterable<C> input, Predikat<? super C> predikat) Counts carane akeh unsur ing koleksi marem aturan predikat
disjunction(Iterable<? extends O> a, Iterable<? extends O> b) Ngasilake obyek sing mung ana ing siji koleksi, nanging ora loro-lorone
persimpangan (Iterable<? extends O> a, Iterable<? extends O> b) Ngasilake koleksi obyek sing dadi bagéan saka loro koleksi bebarengan
union(Iterable<? extends O> a, Iterable<? extends O> b) Ngasilake koleksi obyek sing dadi bagean saka paling ora siji koleksi
kosongKoleksi() Ngasilake koleksi kosong khusus
emptyIfNull(Koleksi <T> koleksi) Ngasilake koleksi kosong yen koleksi == null
ana(Iterable<C> input, Predikat<? super C> predikat) Priksa manawa ana unsur ing koleksi sing nyukupi aturan predikat
extractSingleton(Koleksi<E> koleksi) Ngasilake mung unsur koleksi
filter(Iterable<T> koleksi, Predikat<? super T> predikat) Nyaring unsur koleksi
find(Iterable<T> koleksi, Predikat<? super T> predikat) Nggolek unsur koleksi
isEmpty(Koleksi<?> coll) Priksa manawa koleksi kosong
isEqualCollection(Koleksi<?> a, Koleksi<?> b) Mbandhingake koleksi
isFull(Koleksi<? ngluwihi Object> coll) Priksa manawa ana unsur isih bisa ditambahake menyang koleksi
isNotEmpty(Koleksi<?> coll) Priksa manawa koleksi ora kosong
isSubCollection(Koleksi<?> a, Koleksi<?> b) Priksa manawa koleksi B ana ing koleksi A
matchesAll(Iterable<C> input, Predikat<? super C> predikat) Priksa manawa kabeh unsur koleksi marem aturan predikat
removeAll(Koleksi<E> koleksi, Koleksi<?> mbusak) Mbusak kabeh unsur koleksi
retainAll(Collection<C> collection, Collection<?> retain) Ngasilake koleksi sing ngemot kabeh unsur koleksi sing uga ana ing nahan
reverseArray(Obyek[] array) Mbalikake array mundur
unmodifiableCollection(Collection<? extends C> collection) Ngasilake pambungkus liwat koleksi. Sembarang upaya kanggo ngowahi koleksi bakal mbuwang pengecualian.

Ayo goleki sawetara cara.

Cara kanggo mriksa yen koleksi kosong

Mangkene carane gampang kanggo nemtokake manawa koleksi kosong:

CollectionUtils.isEmpty(null); // true
CollectionUtils.isEmpty(new LinkedList<>()); // true
CollectionUtils.isEmpty(Collections.singleton(new int[]{2, 1})); // false

Gampang banget kanggo mriksa manawa koleksi ora kosong:

CollectionUtils.isNotEmpty(null); // false
CollectionUtils.isNotEmpty(new LinkedList<>()); // false
CollectionUtils.isNotEmpty(Collections.singleton(new int[]{2, 1})); // true

Tuladha:

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

Pandhuan kanggo Apache Commons Collections CollectionUtils

Operasi ing set

Yen sampeyan kudu menehi hasil karo teori set, sampeyan ngerti yen ana 4 operasi dhasar ing set: union, intersection, prabédan lan disjunction.

Kanggo operasi kasebut, kelas CollectionUtils duwe 4 metode:

  • serikat()
  • persimpangan ()
  • disjunction()
  • nyuda ()

Ing ngisor iki sawetara conto prasaja:

Asosiasi

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]

prapatan

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]

Disjunction

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]

Bedane (deduksi)

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]

Operasi ing set, terus

Conto iki nuduhake carane nggunakake papat cara ing ndhuwur kanggo nggarap rong koleksi:

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()));

Hasil kita:

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}

Sampeyan bisa eksprimen karo cara iki dhewe.

unmodifiableCollection() Metode

Kadhangkala kita kudu ngetrapake metode antarmuka sing kudu ngasilake koleksi data internal obyek kita. Lan amarga data kasebut internal, kita ora pengin ana sing ngganti ing endi wae.

Utawa kita wis nampa nang endi wae koleksi sing ora perlu diganti, nanging dipeksa kanggo pass menyang sawetara cara pihak katelu. Endi jaminan yen dheweke ora bakal ngganti?

Supaya bisa turu kanthi tentrem, koleksi kasebut bisa dibungkus ing bungkus khusus sing bakal mbuwang pengecualian nalika nyoba ngowahi koleksi kasebut.

Tuladha:

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]

Cara Collections.unmodifiableCollection () ngasilake pambungkus liwat koleksi liwati menyang. Yen sampeyan nelpon cara get() , size() , banjur kabeh bakal bisa. Nanging, nalika nelpon add () , set () , mbusak () cara , sampeyan bakal entuk pangecualian.

java.lang.UnsupportedOperationException
at org.apache.commons.collections.collection.UnmodifiableCollection.add(UnmodifiableCollection.java:75)

Nyatane, cara kasebut wis ditandhani ora digunakake lan disaranake nggunakake Collections.unmodifiableCollection(Collection<? ngluwihi T> c) tinimbang .

Collection<String> firstCollection = new ArrayList<String>();
Collection<String> secondCollection =
Collections.unmodifiableCollection(firstCollection);