Pengantar CollectionUtils
Kelas utilitas generik lain yang berisi banyak metode berguna:
addAll(Collection<C> collection, C...elements) | Menambahkan semua elemen array C ke koleksi |
addIgnoreNull(Koleksi<T> koleksi, objek T) | Menambahkan elemen jika bukan nol |
berisiSemua(Koleksi<?> coll1, Koleksi<?> coll2) | Periksa apakah collection1 berisi semua elemen collection2 |
berisiAny(Koleksi<?> coll1, Koleksi<?> coll2) | Periksa apakah collection1 berisi setidaknya satu elemen dari collection2 |
countMatches(Iterable<C> input, Predikat<? super C> predikat) | Menghitung berapa banyak elemen dalam koleksi yang memenuhi aturan predikat |
disjungsi(Iterable<? meluas O> a, Iterable<? meluas O> b) | Mengembalikan objek yang hanya ada dalam satu koleksi, tetapi tidak keduanya |
persimpangan(Iterable<? meluas O> a, Iterable<? meluas O> b) | Mengembalikan koleksi objek yang merupakan bagian dari kedua koleksi sekaligus |
serikat(Iterable<? meluas O> a, Iterable<? meluas O> b) | Mengembalikan koleksi objek yang merupakan bagian dari setidaknya satu koleksi |
koleksikosong() | Mengembalikan koleksi kosong khusus |
emptyIfNull(Koleksi<T> koleksi) | Mengembalikan koleksi kosong jika koleksi == null |
ada(Iterable<C> input, Predikat<? super C> predikat) | Memeriksa apakah ada elemen dalam koleksi yang memenuhi aturan predikat |
extractSingleton(Koleksi<E> koleksi) | Mengembalikan satu-satunya elemen dari koleksi |
filter(Koleksi Iterable<T>, Predikat<? super T> predikat) | Memfilter elemen koleksi |
find(Koleksi Iterable<T>, Predikat<? super T> predikat) | Mencari elemen koleksi |
isEmpty(Koleksi<?> coll) | Memeriksa apakah koleksinya kosong |
isEqualCollection(Koleksi<?> a, Koleksi<?> b) | Membandingkan koleksi |
isFull(Koleksi<? extends Object> coll) | Memeriksa apakah suatu elemen masih dapat ditambahkan ke koleksi |
isNotEmpty(Koleksi<?> coll) | Periksa apakah koleksinya tidak kosong |
isSubCollection(Koleksi<?> a, Koleksi<?> b) | Memeriksa apakah koleksi B ada di koleksi A |
matchAll(Iterable<C> input, Predikat<? super C> predikat) | Memeriksa bahwa semua elemen koleksi memenuhi aturan predikat |
hapusSemua(Koleksi<E> koleksi, Koleksi<?> hapus) | Menghapus semua elemen koleksi |
retainAll(Koleksi<C> koleksi, Koleksi<?> pertahankan) | Mengembalikan koleksi yang berisi semua elemen koleksi yang juga terkandung dalam penyimpanan |
reverseArray(Objek[] array) | Membalikkan array mundur |
unmodifiableCollection(Collection<? extends C> collection) | Mengembalikan pembungkus di atas koleksi. Setiap upaya untuk memodifikasi koleksi akan menimbulkan pengecualian. |
Mari kita lihat beberapa metode.
Cara untuk memeriksa apakah koleksi kosong
Inilah betapa mudahnya menentukan apakah suatu koleksi kosong:
CollectionUtils.isEmpty(null); // true
CollectionUtils.isEmpty(new LinkedList<>()); // true
CollectionUtils.isEmpty(Collections.singleton(new int[]{2, 1})); // false
Sama mudahnya untuk memeriksa bahwa 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 Koleksi Apache Commons CollectionUtils
Operasi pada set
Jika Anda harus berurusan dengan teori himpunan, maka Anda tahu bahwa ada 4 operasi dasar pada himpunan: penyatuan, irisan, selisih, dan disjungsi.
Untuk operasi ini, kelas CollectionUtils memiliki 4 metode:
- Persatuan()
- persimpangan()
- pemisahan()
- mengurangi()
Di bawah ini adalah beberapa contoh sederhana:
Sebuah 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]
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]
Pemisahan
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]
Selisih (pengurangan)
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, lanjutan
Contoh ini menunjukkan cara menggunakan empat metode 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()));
Hasil 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 dapat bereksperimen dengan metode ini sendiri.
unmodifiableCollection() Metode
Terkadang kita perlu mengimplementasikan metode antarmuka yang perlu mengembalikan kumpulan data internal objek kita. Dan karena datanya internal, kami tidak ingin siapa pun mengubahnya di suatu tempat.
Atau kami telah menerima koleksi di suatu tempat yang tidak perlu diubah, tetapi dipaksa untuk meneruskannya ke beberapa metode pihak ketiga. Di manakah jaminan bahwa dia tidak akan mengubahnya?
Untuk tidur nyenyak, koleksi dapat dibungkus dengan pembungkus khusus yang akan mengeluarkan pengecualian saat mencoba memodifikasi 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]
Metode Collections.unmodifiableCollection() mengembalikan pembungkus atas koleksi yang diteruskan ke sana. Jika Anda memanggil metode get() , size() , maka semuanya akan berfungsi. Namun, saat memanggil metode add() , set() , remove() , Anda akan mendapatkan pengecualian.
java.lang.UnsupportedOperationException
at org.apache.commons.collections.collection.UnmodifiableCollection.add(UnmodifiableCollection.java:75)
Faktanya, metode ini sudah ditandai sebagai usang dan disarankan untuk menggunakan Collections.unmodifiableCollection(Collection<? extends T> c) sebagai gantinya .
Collection<String> firstCollection = new ArrayList<String>();
Collection<String> secondCollection =
Collections.unmodifiableCollection(firstCollection);
GO TO FULL VERSION