Panimula sa CollectionUtils
Isa pang generic na klase ng utility na naglalaman ng maraming kapaki-pakinabang na pamamaraan:
addAll(Collection<C> collection, C...elements) | Idinaragdag ang lahat ng elemento ng array C sa koleksyon |
addIgnoreNull(Collection<T> collection, T object) | Nagdaragdag ng elemento kung hindi ito null |
naglalaman ngLahat(Collection<?> coll1, Collection<?> coll2) | Sinusuri kung ang collection1 ay naglalaman ng lahat ng elemento ng collection2 |
naglalaman ng Any(Collection<?> coll1, Collection<?> coll2) | Sinusuri kung ang collection1 ay naglalaman ng kahit isang elemento mula sa collection2 |
countMatches(Iterable<C> input, Predicate<? super C> predicate) | Binibilang kung gaano karaming mga elemento sa isang koleksyon ang nakakatugon sa isang tuntunin ng panaguri |
disjunction(Iterable<? extend O> a, Iterable<? extend O> b) | Ibinabalik ang mga bagay na nasa isang koleksyon lang, ngunit hindi pareho |
intersection(Iterable<? extend O> a, Iterable<? extend O> b) | Ibinabalik ang isang koleksyon ng mga bagay na bahagi ng parehong mga koleksyon nang sabay-sabay |
unyon(Iterable<? extend O> a, Iterable<? extend O> b) | Ibinabalik ang isang koleksyon ng mga bagay na bahagi ng hindi bababa sa isang koleksyon |
emptyCollection() | Nagbabalik ng espesyal na walang laman na koleksyon |
emptyIfNull(Collection<T> collection) | Nagbabalik ng walang laman na koleksyon kung koleksyon == null |
umiiral(Iterable<C> input, Predicate<? super C> predicate) | Sinusuri kung mayroong elemento sa koleksyon na nakakatugon sa tuntunin ng panaguri |
extractSingleton(Collection<E> collection) | Ibinabalik ang tanging elemento ng koleksyon |
filter(Iterable<T> collection, Predicate<? super T> predicate) | Sinasala ang mga elemento ng isang koleksyon |
find(Iterable<T> collection, Predicate<? super T> predicate) | Naghahanap ng mga elemento ng isang koleksyon |
isEmpty(Collection<?> coll) | Tinitingnan kung walang laman ang koleksyon |
isEqualCollection(Collection<?> a, Collection<?> b) | Inihahambing ang mga koleksyon |
isFull(Collection<? extends Object> coll) | Sinusuri kung ang isang elemento ay maaari pa ring idagdag sa koleksyon |
isNotEmpty(Collection<?> coll) | Tingnan kung walang laman ang koleksyon |
isSubCollection(Collection<?> a, Collection<?> b) | Sinusuri kung ang koleksyon B ay nasa koleksyon A |
matchesAll(Iterable<C> input, Predicate<? super C> predicate) | Sinusuri kung ang lahat ng elemento ng isang koleksyon ay nakakatugon sa isang tuntunin ng panaguri |
removeAll(Collection<E> collection, Collection<?> remove) | Tinatanggal ang lahat ng elemento ng koleksyon |
retainAll(Collection<C> collection, Collection<?> retain) | Nagbabalik ng koleksyon na naglalaman ng lahat ng elemento ng koleksyon na nakapaloob din sa retain |
reverseArray(Object[] array) | Binabaliktad ang isang array pabalik |
unmodifiableCollection(Collection<? extend C> collection) | Ibinabalik ang isang wrapper sa koleksyon. Anumang pagtatangka na baguhin ang koleksyon ay magbibigay ng pagbubukod. |
Tingnan natin ang ilang mga pamamaraan.
Mga paraan upang suriin kung walang laman ang isang koleksyon
Narito kung gaano kadaling matukoy kung walang laman ang isang koleksyon:
CollectionUtils.isEmpty(null); // true
CollectionUtils.isEmpty(new LinkedList<>()); // true
CollectionUtils.isEmpty(Collections.singleton(new int[]{2, 1})); // false
Ito ay kasingdali lamang na suriin kung ang isang koleksyon ay walang laman:
CollectionUtils.isNotEmpty(null); // false
CollectionUtils.isNotEmpty(new LinkedList<>()); // false
CollectionUtils.isNotEmpty(Collections.singleton(new int[]{2, 1})); // true
Mga halimbawa:
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
Isang Gabay sa Apache Commons Collections CollectionUtils
Mga operasyon sa mga set
Kung kailangan mong harapin ang set theory, alam mo na mayroong 4 na pangunahing operasyon sa mga set: unyon, intersection, difference at disjunction.
Para sa mga operasyong ito, ang klase ng CollectionUtils ay may 4 na pamamaraan:
- unyon()
- interseksyon()
- disjunction()
- ibawas()
Nasa ibaba ang ilang simpleng halimbawa:
Isang asosasyon
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]
interseksyon
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]
Pagkakaiba (bawas)
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]
Ang mga operasyon sa mga set, ipinagpatuloy
Ipinapakita ng halimbawang ito kung paano gamitin ang apat na pamamaraan sa itaas upang gumana sa dalawang koleksyon:
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()));
Ang aming resulta:
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}
Maaari kang mag-eksperimento sa mga pamamaraang ito nang mag-isa.
unmodifiableCollection() Method
Minsan kailangan nating ipatupad ang mga pamamaraan ng interface na kailangang ibalik ang mga koleksyon ng panloob na data ng ating mga bagay. At dahil panloob ang data, ayaw naming baguhin ito ng sinuman saanman.
O nakatanggap kami sa isang lugar ng isang koleksyon na hindi kailangang baguhin, ngunit napipilitang ipasa ito sa ilang paraan ng third-party. Nasaan ang garantiya na hindi niya ito babaguhin?
Upang makatulog nang mapayapa, ang koleksyon ay maaaring balot sa isang espesyal na wrapper na maglalagay ng isang pagbubukod kapag sinusubukang baguhin ang koleksyon.
Halimbawa:
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]
Ang paraan ng Collections.unmodifiableCollection() ay nagbabalik ng isang wrapper sa koleksyon na ipinasa dito. Kung tatawagin mo ang get() , size() na mga pamamaraan , gagana ang lahat. Gayunpaman, kapag tumatawag sa add() , set() , remove() method , makakakuha ka ng exception.
java.lang.UnsupportedOperationException
at org.apache.commons.collections.collection.UnmodifiableCollection.add(UnmodifiableCollection.java:75)
Sa katunayan, ang pamamaraan ay minarkahan na bilang hindi na ginagamit at inirerekumenda na gamitin ang Collections.unmodifiableCollection(Collection<? extends T> c) sa halip .
Collection<String> firstCollection = new ArrayList<String>();
Collection<String> secondCollection =
Collections.unmodifiableCollection(firstCollection);
GO TO FULL VERSION