Pengenalan kepada CollectionUtils
Satu lagi kelas utiliti generik yang mengandungi banyak kaedah berguna:
addAll(Koleksi<C> koleksi, C...elemen) | Menambah semua elemen tatasusunan C pada koleksi |
addIgnoreNull(Koleksi<T> koleksi, objek T) | Menambah elemen jika ia bukan nol |
mengandungiSemua(Koleksi<?> coll1, Koleksi<?> coll2) | Semak bahawa koleksi1 mengandungi semua elemen koleksi2 |
mengandungi Mana-mana(Koleksi<?> coll1, Koleksi<?> coll2) | Semak bahawa collection1 mengandungi sekurang-kurangnya satu elemen daripada collection2 |
countMatches(Iterable<C> input, Predikat<? super C> predikat) | Mengira bilangan elemen dalam koleksi yang memenuhi peraturan predikat |
disjunction(Iterable<? extends O> a, Iterable<? extends O> b) | Mengembalikan objek yang hanya dalam satu koleksi, tetapi bukan kedua-duanya |
persimpangan(Iterable<? memanjang O> a, Iterable<? memanjang O> b) | Mengembalikan koleksi objek yang merupakan sebahagian daripada kedua-dua koleksi sekaligus |
kesatuan(Iterable<? extends O> a, Iterable<? extends O> b) | Mengembalikan koleksi objek yang merupakan sebahagian daripada sekurang-kurangnya satu koleksi |
emptyCollection() | Mengembalikan koleksi kosong khas |
emptyIfNull(Koleksi<T> koleksi) | Mengembalikan koleksi kosong jika koleksi == null |
wujud(Iterable<C> input, Predicate<? super C> predikat) | Menyemak sama ada terdapat unsur dalam koleksi yang memenuhi peraturan predikat |
extractSingleton(Koleksi<E> koleksi) | Mengembalikan satu-satunya elemen koleksi |
penapis(Iterable<T> koleksi, Predikat<? super T> predikat) | Menapis elemen koleksi |
find(Iterable<T> koleksi, Predikat<? super T> predikat) | Mencari elemen koleksi |
isEmpty(Collection<?> coll) | Menyemak sama ada koleksi kosong |
isEqualCollection(Koleksi<?> a, Koleksi<?> b) | Membandingkan koleksi |
isFull(Collection<? extends Object> coll) | Menyemak sama ada elemen masih boleh ditambahkan pada koleksi |
isNotEmpty(Collection<?> coll) | Semak jika koleksi tidak kosong |
isSubCollection(Koleksi<?> a, Koleksi<?> b) | Semak sama ada koleksi B ada dalam koleksi A |
matchesAll(Iterable<C> input, Predikat<? super C> predikat) | Semak bahawa semua elemen koleksi memenuhi peraturan predikat |
removeAll(Koleksi<E> koleksi, Koleksi<?> alih keluar) | Mengalih keluar semua elemen koleksi |
retainAll(Koleksi<C> koleksi, Koleksi<?> kekalkan) | Mengembalikan koleksi yang mengandungi semua elemen koleksi yang turut terkandung dalam simpan |
reverseArray(Objek[] tatasusunan) | Membalikkan tatasusunan ke belakang |
unmodifiableCollection(Collection<? melanjutkan koleksi C>) | Mengembalikan pembalut pada koleksi. Sebarang percubaan untuk mengubah suai koleksi akan memberikan pengecualian. |
Mari lihat beberapa kaedah.
Cara untuk menyemak sama ada koleksi kosong
Begini cara mudah untuk menentukan sama ada koleksi kosong:
CollectionUtils.isEmpty(null); // true
CollectionUtils.isEmpty(new LinkedList<>()); // true
CollectionUtils.isEmpty(Collections.singleton(new int[]{2, 1})); // false
Semudah itu untuk menyemak bahawa koleksi tidak kosong:
CollectionUtils.isNotEmpty(null); // false
CollectionUtils.isNotEmpty(new LinkedList<>()); // false
CollectionUtils.isNotEmpty(Collections.singleton(new int[]{2, 1})); // true
Contoh:
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
Panduan untuk Apache Commons Collections CollectionUtils
Operasi pada set
Jika anda terpaksa berurusan dengan teori set, maka anda tahu bahawa terdapat 4 operasi asas pada set: kesatuan, persilangan, perbezaan dan pemecahan.
Untuk operasi ini, kelas CollectionUtils mempunyai 4 kaedah:
- kesatuan()
- persimpangan()
- disjunction()
- tolak()
Di bawah adalah beberapa contoh mudah:
Sebuah persatuan
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]
persimpangan
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]
Perbezaan (potongan)
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 pada set, diteruskan
Contoh ini menunjukkan cara menggunakan empat kaedah di atas untuk bekerja dengan dua 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()));
Keputusan kami:
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}
Anda boleh mencuba kaedah ini sendiri.
Kaedah unmodifiableCollection().
Kadangkala kita perlu melaksanakan kaedah antara muka yang perlu mengembalikan koleksi data dalaman objek kita. Dan kerana data adalah dalaman, kami tidak mahu sesiapa mengubahnya di suatu tempat.
Atau kami telah menerima koleksi yang tidak perlu ditukar di suatu tempat, tetapi terpaksa menyerahkannya kepada beberapa kaedah pihak ketiga. Di manakah jaminan bahawa dia tidak akan mengubahnya?
Untuk tidur dengan tenang, koleksi boleh dibalut dengan pembungkus khas yang akan memberikan pengecualian apabila cuba mengubah suai koleksi.
Contoh:
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]
Kaedah Collections.unmodifiableCollection() mengembalikan pembalut ke atas koleksi yang dihantar kepadanya. Jika anda memanggil kaedah get() , size() , maka semuanya akan berfungsi. Walau bagaimanapun, apabila memanggil kaedah add() , set() , remove() , anda akan mendapat pengecualian.
java.lang.UnsupportedOperationException
at org.apache.commons.collections.collection.UnmodifiableCollection.add(UnmodifiableCollection.java:75)
Malah, kaedah tersebut telah ditandakan sebagai tidak digunakan dan disyorkan untuk menggunakan Collections.unmodifiableCollection(Collection<? extends T> c) sebaliknya .
Collection<String> firstCollection = new ArrayList<String>();
Collection<String> secondCollection =
Collections.unmodifiableCollection(firstCollection);
GO TO FULL VERSION