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) | Коллексия == 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) | Collection'даги retain'да мавжуд бўлган барча элементларни ўз ичига олган коллексияни қайтаради |
| reverseArray(Object[] array) | Массивни орқага айлантириш |
| unmodifiableCollection(Collection<? extends C> collection) | Коллексия устидан wrapper қайтаради. Коллексияни ўзгартиришга уриниш истиснога олиб келади. |
Айрим методларни кўриб чиқамиз.
Коллексия буш эканлигини текшириш усуллари
Коллексия буш эканлигини аниқлаш қанчалик осон эканини кўринг:
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
A Guide to Apache Commons Collections CollectionUtils
Множестволар билан операциялар
Агар сага множестволар назарияси билан таниш бўлса, сен множестволар устида 4 асосий операция борлигини биласан: бирлаштириш, кесиш, фарқ ва дизъюнкция.
Бу операциялар учун CollectionUtils class 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() унга берилган коллексия устидан wrapper қайтаради. Агар унга get(), size() методларини чақирса, ҳамма нарса ишлайди. Бироқ, add(), set(), remove() методларини чақирганда, ты истисно оласан.
java.lang.UnsupportedOperationException
at org.apache.commons.collections.collection.UnmodifiableCollection.add(UnmodifiableCollection.java:75)
Аслида, бу метод аллақачон deprecation билан белгиланган ва унинг ўрнига Collections.unmodifiableCollection(Collection<? extends T> c) ишлатиш тавсия қилинади.
Collection<String> firstCollection = new ArrayList<String>();
Collection<String> secondCollection =
Collections.unmodifiableCollection(firstCollection);
GO TO FULL VERSION