CollectionUtilsకి పరిచయం

అనేక ఉపయోగకరమైన పద్ధతులను కలిగి ఉన్న మరొక సాధారణ యుటిలిటీ తరగతి:

addAll(సేకరణ<C> సేకరణ, C...మూలకాలు) సేకరణకు శ్రేణి C యొక్క అన్ని మూలకాలను జోడిస్తుంది
addIgnoreNull(సేకరణ<T> సేకరణ, T వస్తువు) అది శూన్యం కాకపోతే ఒక మూలకాన్ని జోడిస్తుంది
అన్నీ కలిగి ఉంది(సేకరణ<?> coll1, సేకరణ<?> coll2) సేకరణ1లో సేకరణ2లోని అన్ని అంశాలు ఉన్నాయని తనిఖీ చేస్తుంది
కలిగి ఏదైనా(సేకరణ<?> coll1, సేకరణ<?> coll2) సేకరణ1 సేకరణ2 నుండి కనీసం ఒక మూలకాన్ని కలిగి ఉందని తనిఖీ చేస్తుంది
కౌంట్‌మ్యాచ్‌లు(ఇటరబుల్<C> ఇన్‌పుట్, ప్రిడికేట్<? సూపర్ సి> ప్రిడికేట్) సేకరణలో ఎన్ని అంశాలు ప్రిడికేట్ నియమాన్ని సంతృప్తి పరుస్తాయో గణిస్తుంది
disjunction(ఇటరబుల్<? విస్తరిస్తుంది O> a, ఇటరబుల్<? పొడిగిస్తుంది O> b) ఒకే సేకరణలో ఉన్న వస్తువులను అందిస్తుంది, కానీ రెండూ కాదు
ఖండన(ఇటరాబుల్<? విస్తరిస్తుంది O> a, ఇటరబుల్<? విస్తరిస్తుంది O> b) రెండు సేకరణలలో భాగమైన వస్తువుల సేకరణను ఒకేసారి అందిస్తుంది
యూనియన్(ఇటరబుల్<? పొడిగిస్తుంది O> a, ఇటరబుల్<? పొడిగిస్తుంది O> b) కనీసం ఒక సేకరణలో భాగమైన వస్తువుల సేకరణను అందిస్తుంది
ఖాళీ సేకరణ() ప్రత్యేక ఖాళీ సేకరణను అందిస్తుంది
ఖాళీIfNull(సేకరణ<T> సేకరణ) సేకరణ == శూన్యం అయితే ఖాళీ సేకరణను అందిస్తుంది
ఉనికిలో ఉంది (ఇటరబుల్<C> ఇన్‌పుట్, ప్రిడికేట్<? సూపర్ సి> ప్రిడికేట్) ప్రిడికేట్ నియమాన్ని సంతృప్తిపరిచే మూలకం సేకరణలో ఉందో లేదో తనిఖీ చేస్తుంది
extractSingleton(కలెక్షన్<E> సేకరణ) సేకరణలోని ఏకైక మూలకాన్ని అందిస్తుంది
ఫిల్టర్(ఇటరబుల్<T> సేకరణ, ప్రిడికేట్<? సూపర్ T> ప్రిడికేట్) సేకరణ మూలకాలను ఫిల్టర్ చేస్తుంది
కనుగొను(ఇటరబుల్<T> సేకరణ, ప్రిడికేట్<? సూపర్ T> ప్రిడికేట్) సేకరణ అంశాల కోసం వెతుకుతోంది
isEmpty(సేకరణ<?> coll) సేకరణ ఖాళీగా ఉందో లేదో తనిఖీ చేస్తుంది
isEqualCollection(సేకరణ<?> a, Collection<?> b) సేకరణలను సరిపోల్చండి
isFull(కలెక్షన్<? ఆబ్జెక్ట్> coll ని పొడిగిస్తుంది) ఎలిమెంట్‌ని ఇంకా సేకరణకు జోడించవచ్చో లేదో తనిఖీ చేస్తుంది
isNotEmpty(కలెక్షన్<?> coll) సేకరణ ఖాళీగా లేకుంటే తనిఖీ చేయండి
isSubCollection(సేకరణ<?> a, సేకరణ<?> b) సేకరణ B సేకరణ A లో ఉందో లేదో తనిఖీ చేస్తుంది
మ్యాచ్‌లు అన్నీ(ఇటరబుల్<C> ఇన్‌పుట్, ప్రిడికేట్<? సూపర్ సి> ప్రిడికేట్) సేకరణలోని అన్ని అంశాలు ముందస్తు నియమానికి అనుగుణంగా ఉన్నాయో లేదో తనిఖీ చేస్తుంది
RemoveAll(సేకరణ<E> సేకరణ, సేకరణ<?> తీసివేయి) సేకరణలోని అన్ని అంశాలను తొలగిస్తుంది
retainAll(సేకరణ<C> సేకరణ, సేకరణ<?> నిలుపుకోవడం) నిలుపుదలలో ఉన్న అన్ని సేకరణ మూలకాలను కలిగి ఉన్న సేకరణను అందిస్తుంది
రివర్స్అరే(ఆబ్జెక్ట్[] అర్రే) శ్రేణిని వెనుకకు తిప్పుతుంది
మార్చలేని సేకరణ(సేకరణ<? C> సేకరణను విస్తరించింది) సేకరణపై ఒక ర్యాపర్‌ను అందిస్తుంది. సేకరణను సవరించడానికి చేసే ఏదైనా ప్రయత్నానికి మినహాయింపు ఉంటుంది.

కొన్ని పద్ధతులను చూద్దాం.

సేకరణ ఖాళీగా ఉందో లేదో తనిఖీ చేసే మార్గాలు

సేకరణ ఖాళీగా ఉందో లేదో గుర్తించడం ఎంత సులభమో ఇక్కడ ఉంది:

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

సేకరణ ఖాళీగా లేదని తనిఖీ చేయడం కూడా అంతే సులభం:

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

ఉదాహరణలు:

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

Apache Commons Collections CollectionUtilsకి గైడ్

సెట్లలో కార్యకలాపాలు

మీరు సెట్ థియరీతో వ్యవహరించాల్సి వస్తే, సెట్‌లలో 4 ప్రాథమిక కార్యకలాపాలు ఉన్నాయని మీకు తెలుసు: యూనియన్, ఖండన, తేడా మరియు డిస్జంక్షన్.

ఈ కార్యకలాపాల కోసం, CollectionUtils తరగతికి 4 పద్ధతులు ఉన్నాయి:

  • యూనియన్ ()
  • కూడలి ()
  • డిస్జంక్షన్ ()
  • తీసివేయి ()

క్రింద కొన్ని సాధారణ ఉదాహరణలు ఉన్నాయి:

ఒక సంఘం

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]

కూడలి

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]

డిస్జంక్షన్

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]

తేడా (తగ్గింపు)

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]

సెట్స్‌పై కార్యకలాపాలు కొనసాగాయి

రెండు సేకరణలతో పని చేయడానికి పై నాలుగు పద్ధతులను ఎలా ఉపయోగించాలో ఈ ఉదాహరణ చూపిస్తుంది:

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

మా ఫలితం:

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}

మీరు ఈ పద్ధతులతో మీ స్వంతంగా ప్రయోగాలు చేయవచ్చు.

మార్పులేని సేకరణ() పద్ధతి

కొన్నిసార్లు మేము మా వస్తువుల అంతర్గత డేటా సేకరణలను తిరిగి ఇవ్వడానికి అవసరమైన ఇంటర్‌ఫేస్ పద్ధతులను అమలు చేయాల్సి ఉంటుంది. మరియు డేటా అంతర్గతంగా ఉన్నందున, దానిని ఎవరైనా ఎక్కడా మార్చకూడదనుకుంటున్నాము.

లేదా మేము ఎక్కడో ఒక సేకరణను స్వీకరించాము, అది మార్చవలసిన అవసరం లేదు, కానీ దానిని ఏదో మూడవ పక్ష పద్ధతికి పంపవలసి వస్తుంది. ఆయన మార్చుకోరని గ్యారంటీ ఎక్కడిది?

ప్రశాంతంగా నిద్రించడానికి, సేకరణను ప్రత్యేక రేపర్‌లో చుట్టవచ్చు, ఇది సేకరణను సవరించడానికి ప్రయత్నిస్తున్నప్పుడు మినహాయింపును అందిస్తుంది.

ఉదాహరణ:

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]

Collections.unmodifiableCollection() పద్ధతి దానికి పంపిన సేకరణపై ఒక ర్యాపర్‌ని అందిస్తుంది. మీరు దాని get() , size() methods అని కాల్ చేస్తే , అప్పుడు ప్రతిదీ పని చేస్తుంది. అయితే, add() , set() , remove() పద్ధతులకు కాల్ చేస్తున్నప్పుడు , మీరు మినహాయింపు పొందుతారు.

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

వాస్తవానికి, పద్ధతి ఇప్పటికే నిలిపివేయబడినట్లు గుర్తించబడింది మరియు బదులుగా Collections.unmodifiableCollection(కలెక్షన్<? పొడిగిస్తుంది T> c)ని ఉపయోగించమని సిఫార్సు చేయబడింది .

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