CollectionUtils এর পরিচিতি

আরেকটি জেনেরিক ইউটিলিটি ক্লাস যা অনেক দরকারী পদ্ধতি ধারণ করে:

addAll(সংগ্রহ<C> সংগ্রহ, C...elements) সংগ্রহে অ্যারের C-এর সমস্ত উপাদান যোগ করে
addIgnoreNull(সংগ্রহ<T> সংগ্রহ, T অবজেক্ট) একটি উপাদান যোগ করে যদি এটি শূন্য না হয়
সম্বলিত সকল(সংগ্রহ<?> coll1, সংগ্রহ<?> coll2) যাচাই করে যে collection1-এ collection2-এর সমস্ত উপাদান রয়েছে
যেকোনও রয়েছে(সংগ্রহ<?> coll1, সংগ্রহ<?> coll2) সংগ্রহ 2 থেকে অন্তত একটি উপাদান আছে কিনা তা পরীক্ষা করে
কাউন্টম্যাচস(Iterable<C> ইনপুট, Predicate<? super C> predicate) একটি সংগ্রহের কতগুলি উপাদান একটি পূর্বনির্ধারিত নিয়মকে পূরণ করে তা গণনা করে৷
বিচ্ছিন্নতা(Iterable<? extensions O> a, Iterable<? প্রসারিত O> b) শুধুমাত্র একটি সংগ্রহে থাকা বস্তু ফেরত দেয়, কিন্তু দুটি নয়
ছেদ (Iterable<? extensions O> a, Iterable<? প্রসারিত O> b) একই সময়ে উভয় সংগ্রহের অংশ এমন বস্তুর সংগ্রহ দেখায়
ইউনিয়ন(Iterable<? extensions O> a, Iterable<? প্রসারিত O> b) অন্তত একটি সংগ্রহের অংশ এমন বস্তুর সংগ্রহ দেখায়
খালি সংগ্রহ() একটি বিশেষ খালি সংগ্রহ ফেরত দেয়
emptyIfNull(সংগ্রহ<T> সংগ্রহ) সংগ্রহ == শূন্য হলে একটি খালি সংগ্রহ ফেরত দেয়
বিদ্যমান (Iterable<C> input, Predicate<? super C> predicate) সংগ্রহে এমন কোনো উপাদান আছে কিনা যা পূর্বনির্ধারিত নিয়মকে সন্তুষ্ট করে তা পরীক্ষা করে
নির্যাস সিঙ্গলটন (সংগ্রহ<E> সংগ্রহ) সংগ্রহের একমাত্র উপাদান প্রদান করে
ফিল্টার (Iterable<T> সংগ্রহ, Predicate<? super T> predicate) একটি সংগ্রহের উপাদানগুলিকে ফিল্টার করে
খুঁজুন(Iterable<T> সংগ্রহ, Predicate<? super T> predicate) একটি সংগ্রহের উপাদান খুঁজছেন
খালি (সংগ্রহ<?> কল) সংগ্রহটি খালি কিনা তা পরীক্ষা করে
isEqualCollection(সংগ্রহ<?> a, সংগ্রহ<?> b) সংগ্রহ তুলনা
isFull(সংগ্রহ<? প্রসারিত বস্তু> কল) সংগ্রহে এখনও একটি উপাদান যোগ করা যায় কিনা তা পরীক্ষা করে
isNotEmpty(সংগ্রহ<?> কল) সংগ্রহটি খালি না হলে পরীক্ষা করুন
isSubCollection(সংগ্রহ<?> a, সংগ্রহ<?> b) সংগ্রহ B সংগ্রহ A এ আছে কিনা তা পরীক্ষা করে
সব মিলে(Iterable<C> ইনপুট, Predicate<? super C> predicate) একটি সংগ্রহের সমস্ত উপাদান একটি পূর্বনির্ধারিত নিয়ম পূরণ করে তা পরীক্ষা করে
সরান সকল(সংগ্রহ<E> সংগ্রহ, সংগ্রহ<?> সরান) সংগ্রহের সমস্ত উপাদান সরিয়ে দেয়
সবগুলো ধরে রাখুন (সংগ্রহ<C> সংগ্রহ, সংগ্রহ<?> ধরে রাখা) সংগ্রহের সমস্ত উপাদান সমন্বিত একটি সংগ্রহ প্রদান করে যা রিটেইন-এও রয়েছে
বিপরীত অ্যারে (বস্তু [] অ্যারে) একটি অ্যারেকে পিছনের দিকে ফিরিয়ে দেয়
unmodifiable Collection(সংগ্রহ<? প্রসারিত 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 টি মৌলিক ক্রিয়াকলাপ রয়েছে: ইউনিয়ন, ছেদ, পার্থক্য এবং বিচ্ছিন্নতা।

এই অপারেশনগুলির জন্য, কালেকশন ইউটিলস ক্লাসের 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}

আপনি নিজেরাই এই পদ্ধতিগুলি নিয়ে পরীক্ষা করতে পারেন।

unmodifiable Collection() পদ্ধতি

কখনও কখনও আমাদের ইন্টারফেস পদ্ধতিগুলি প্রয়োগ করতে হবে যা আমাদের বস্তুর অভ্যন্তরীণ ডেটা সংগ্রহ করতে হবে। এবং যেহেতু ডেটা অভ্যন্তরীণ, তাই আমরা চাই না কেউ এটি কোথাও পরিবর্তন করুক।

অথবা আমরা কোথাও এমন একটি সংগ্রহ পেয়েছি যা পরিবর্তন করার প্রয়োজন নেই, তবে এটিকে তৃতীয় পক্ষের পদ্ধতিতে পাস করতে বাধ্য করা হয়েছে। তিনি যে তা বদলাবেন না তার নিশ্চয়তা কোথায়?

শান্তিপূর্ণভাবে ঘুমানোর জন্য, সংগ্রহটি একটি বিশেষ মোড়কে মোড়ানো যেতে পারে যা সংগ্রহটি সংশোধন করার চেষ্টা করার সময় একটি ব্যতিক্রম নিক্ষেপ করবে।

উদাহরণ:

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() পদ্ধতিগুলিকে কল করেন তবে সবকিছুই কাজ করবে। যাইহোক, add() , set() , remove() মেথড কল করার সময় আপনি একটি ব্যতিক্রম পাবেন।

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

প্রকৃতপক্ষে, পদ্ধতিটি ইতিমধ্যেই অপ্রচলিত হিসাবে চিহ্নিত করা হয়েছে এবং এর পরিবর্তে Collections.unmodifiableCollection(Collection<? extensions T> c) ব্যবহার করার পরামর্শ দেওয়া হচ্ছে ।

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