CollectionUtils менен таанышуу
Көптөгөн пайдалуу ыкмаларды камтыган дагы бир универсалдуу утилиттик класс:
addAll(Collection<C> collection, C... elements) | Массив C'теги бардык элементтерди коллекцияга кошот |
addIgnoreNull(Collection<T> collection, T object) | Эгер элемент null болбосо, кошот |
containsAll(Collection<?> coll1, Collection<?> coll2) | коллекция1 коллекция2нин бардык элементтерин камтылганын текшерет |
containsAny(Collection<?> coll1, Collection<?> coll2) | коллекция1 коллекция2нин жок дегенде бир элементин камтылганын текшерет |
countMatches(Iterable<C> input, Predicate<? super C> predicate) | Коллекциянын канча элементтери predicate эрежесине жооп бергенин эсептейт |
disjunction(Iterable<? extends O> a, Iterable<? extends O> b) | Бир гана коллекцияда болгон объекттерди кайтарат, бирок экөөндө тең учурда жок |
intersection(Iterable<? extends O> a, Iterable<? extends O> b) | Эки коллекцияда тең бар болгон объекттердин коллекциясын кайтарат |
union(Iterable<? extends O> a, Iterable<? extends O> b) | Жок дегенде бир коллекцияда болгон объекттердин коллекциясын кайтарат |
emptyCollection() | Атайын бош коллекцияны кайтарат |
emptyIfNull(Collection<T> collection) | Эгер collection == null болсо, бош коллекцияны кайтарат |
exists(Iterable<C> input, Predicate<? super C> predicate) | Коллекцияда predicate эрежесине жооп берген элемент бар экенин текшерет |
extractSingleton(Collection<E> collection) | Коллекциянын бир гана элементин кайтарат |
filter(Iterable<T> collection, Predicate<? super T> predicate) | Коллекцияны элементтерин фильтрлейт |
find(Iterable<T> collection, Predicate<? super T> predicate) | Коллекциянын элементтерин издеп табат |
isEmpty(Collection<?> coll) | Коллекция бош экенин текшерет |
isEqualCollection(Collection<?> a, Collection<?> b) | Коллекцияларды салыштырат |
isFull(Collection<? extends Object> coll) | Коллекцияга дагы элемент кошсо болобу же жокпу текшерет |
isNotEmpty(Collection<?> coll) | Коллекция бош эмес экенин текшерет |
isSubCollection(Collection<?> a, Collection<?> b) | Коллекция B коллекция A'нын ичинде бар экенин текшерет |
matchesAll(Iterable<C> input, Predicate<? super C> predicate) | Коллекциянын бардык элементтери predicate эрежесине жооп бергенин текшерет |
removeAll(Collection<E> collection, Collection<?> remove) | Коллекциянын бардык элементтерин жок кылат |
retainAll(Collection<C> collection, Collection<?> retain) | Коллекциянын retain'де дагы бар болгон бардык элементтерин камтыган коллекцияны кайтарат |
reverseArray(Object[] array) | Массивди артка карата бурат |
unmodifiableCollection(Collection<? extends C> collection) | Коллекциянын үстүндөгү оберткасын кайтарат. Коллекцияны өзгөртүүгө аракет кылганда, ал ката ыргытып жиберет. |
Кээ бир ыкмаларды карап көрөлү.
Коллекция бошпу экенин текшерген ыкмалар
Коллекциянын бош же жок экенин аныктоо ушунчалык жөнөкөй:
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 CollectionUtils жөнүндө колдонмо
Жыйындыктар менен операциялар
Эгер жыйындык теориясы менен иштешиң керек болсо, анда сен жыйындыктар менен 4 негизги операция бар экенин билесиң: бирикмеси, кесилиш, айырмасы жана дизъюнкция.

Бул операциялар үчүн CollectionUtils класстарында 4 ыкма бар:
- union()
- intersection()
- disjunction()
- subtract()
Төмөндө бир нече жөнөкөй мисалдар болот:
Бирикмеси
List<String> firstList = Arrays.asList("1", "2", "3", "4", "5", "6");
List<String> secondList = Arrays.asList("2", "3", "6", "7", "8", "9");
//эки жыйынтыкты бириктирүү
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");
//эки жыйынтыктын кешилиши
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");
//дизъюнкция
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");
//айырмасы
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); // Бирикмеси
Collection<Integer> intersection = CollectionUtils.intersection(firstList, secondList); // Кешилиш
Collection<Integer> disjunction = CollectionUtils.disjunction(firstList, secondList); // Дизъюнкция
Collection<Integer> subtract = CollectionUtils.subtract(firstList, secondList); // Айырмасы
System.out.println("firstList: " + ArrayUtils.toString(firstList.toArray()));
System.out.println("secondList: " + ArrayUtils.toString(secondList.toArray()));
System.out.println("Бирикмеси: " + ArrayUtils.toString(union.toArray()));
System.out.println("Кешилиш: " + ArrayUtils.toString(intersection.toArray()));
System.out.println("Дизъюнкция: " + ArrayUtils.toString(disjunction.toArray()));
System.out.println("Айырмасы: " + ArrayUtils.toString(subtract.toArray()));
Биздин жыйынтык:
firstList: {1,2,3,3,4,5}
secondList: {3,4,4,5,6,7}
Бирикмеси: {1,2,3,3,4,4,5,6,7}
Кешилиш: {3,4,5}
Дизъюнкция: {1,2,3,4,6,7}
Айырмасы: {1,2,3}
Бул ыкмалар менен өзүнчө эксперимент кылып көр.
unmodifiableCollection() ыкмасы
Кээде интерфейстин ыкмаларын ишке ашыруу керек болот, алар биздин объекттерибиздин ички маалыматтарынын коллекциясын кайтарууга тийиш. Анткени маалыматтар ички, биз каалабайбыз аларды бирөө-бирөө алмаштыруусун.
Же биз кайсы бир жерден өзгөртүүгө керек жогун коллекцияны алдык, бирок аны кайсы бир башка ыкмага өткөрүү керек болду. Ал аны өзгөртпөйт деп кайдан билебиз?
Көзүбүз тынч болуш үчүн, коллекцияны өзгөртүүгө аракет кылганда ката ыргыта турган атайын орогучка ороп койсо болот.
Мисал:
Collection<String> firstCollection = new ArrayList<String>();
Collection<String> secondCollection = Collections.unmodifiableCollection(firstCollection);
firstCollection.add("hello");
firstCollection.add("from");
firstCollection.add("javaRush");
//secondCollection.add("have a error");
System.out.println(secondCollection); //[hello, from, javaRush]
Collections.unmodifiableCollection() ыкмасы, берилген коллекциянын үстүндөгү оберткасын кайтарат. Эгер ага get(), size() ыкмаларды чакырсаң, бардыгы иштейт. Бирок add(), set(), remove() ыкмалар чакырылганда, сен ката аласың.
java.lang.UnsupportedOperationException
at org.apache.commons.collections.collection.UnmodifiableCollection.add(UnmodifiableCollection.java:75)
Чынында, азыртан эле ыкма депрекатед болуп калган жана анын ордуна Collections.unmodifiableCollection(Collection<? extends T> c) колдонуу сунушталат.
Collection<String> firstCollection = new ArrayList<String>();
Collection<String> secondCollection =
Collections.unmodifiableCollection(firstCollection);
GO TO FULL VERSION