JavaRush /Курстар /All lectures for KY purposes /Apache Commons'тун CollectionUtils классы

Apache Commons'тун CollectionUtils классы

All lectures for KY purposes
Деңгээл , Сабак
жеткиликтүү

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

Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION