Introduction à CollectionUtils
Une autre classe utilitaire générique qui contient de nombreuses méthodes utiles :
addAll(Collection<C> collection, C...elements) | Ajoute tous les éléments du tableau C à la collection |
addIgnoreNull(Collection<T> collection, T objet) | Ajoute un élément s'il n'est pas nul |
contientTout(Collection<?> coll1, Collection<?> coll2) | Vérifie que collection1 contient tous les éléments de collection2 |
contientTout(Collection<?> coll1, Collection<?> coll2) | Vérifie que collection1 contient au moins un élément de collection2 |
countMatches(Iterable<C> input, Predicate<? super C> predicate) | Compte combien d'éléments dans une collection satisfont une règle de prédicat |
disjonction(Itérable<? étend O> a, Itérable<? étend O> b) | Renvoie les objets qui se trouvent dans une seule collection, mais pas les deux |
intersection(Itérable<? étend O> a, Itérable<? étend O> b) | Renvoie une collection d'objets qui font partie des deux collections à la fois |
union(Itérable<? étend O> a, Itérable<? étend O> b) | Renvoie une collection d'objets faisant partie d'au moins une collection |
collectionvide() | Renvoie une collection vide spéciale |
videSiNull(Collection<T>collection) | Retourne une collection vide si collection == null |
existe (entrée Iterable<C>, prédicat<? super prédicat C>) | Vérifie s'il y a un élément dans la collection qui satisfait la règle de prédicat |
extraitSingleton(Collection <E> collection) | Renvoie le seul élément de la collection |
filter(Iterable<T> collection, Predicate<? super T> prédicat) | Filtre les éléments d'une collection |
find(Iterable<T> collection, Predicate<? super T> prédicat) | Recherche d'éléments d'une collection |
estVide(Collection<?>coll) | Vérifie si la collection est vide |
isEqualCollection(Collection<?>a, Collection<?>b) | Compare les collections |
isFull(Collection<? étend l'objet> coll) | Vérifie si un élément peut encore être ajouté à la collection |
n'est pas vide(Collection<?> coll) | Vérifier si la collection n'est pas vide |
isSubCollection(Collection<?>a, Collection<?>b) | Vérifie si la collection B est dans la collection A |
matchesAll(Iterable<C> input, Predicate<? super C> predicate) | Vérifie que tous les éléments d'une collection satisfont une règle de prédicat |
removeAll(Collection<E> collection, Collection<?> supprimer) | Supprime tous les éléments de la collection |
conserverTout(Collection<C> collection, Collection<?> conserver) | Renvoie une collection contenant tous les éléments de la collection qui sont également contenus dans retention |
reverseArray(Tableau Objet[]) | Inverse un tableau à l'envers |
unmodifiableCollection(Collection<? étend la collection C>) | Retourne un wrapper sur la collection. Toute tentative de modification de la collection lèvera une exception. |
Regardons quelques méthodes.
Façons de vérifier si une collection est vide
Voici à quel point il est facile de déterminer si une collection est vide :
CollectionUtils.isEmpty(null); // true
CollectionUtils.isEmpty(new LinkedList<>()); // true
CollectionUtils.isEmpty(Collections.singleton(new int[]{2, 1})); // false
Il est tout aussi simple de vérifier qu'une collection n'est pas vide :
CollectionUtils.isNotEmpty(null); // false
CollectionUtils.isNotEmpty(new LinkedList<>()); // false
CollectionUtils.isNotEmpty(Collections.singleton(new int[]{2, 1})); // true
Exemples:
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
Un guide des collections Apache Commons CollectionUtils
Opérations sur les ensembles
Si vous deviez vous occuper de la théorie des ensembles, alors vous savez qu'il existe 4 opérations de base sur les ensembles : l'union, l'intersection, la différence et la disjonction.
Pour ces opérations, la classe CollectionUtils dispose de 4 méthodes :
- syndicat()
- intersection()
- disjonction()
- soustraire()
Ci-dessous quelques exemples simples :
Une association
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]
intersection
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]
Disjonction
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]
Différence (déduction)
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]
Opérations sur les décors, suite
Cet exemple montre comment utiliser les quatre méthodes ci-dessus pour travailler avec deux collections :
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()));
Notre résultat :
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}
Vous pouvez expérimenter ces méthodes par vous-même.
Méthode unmodifiableCollection()
Parfois, nous devons implémenter des méthodes d'interface qui doivent renvoyer des collections de données internes de nos objets. Et puisque les données sont internes, nous ne voulons pas que quiconque les modifie quelque part.
Ou nous avons reçu quelque part une collection qui n'a pas besoin d'être modifiée, mais qui est obligée de la transmettre à une méthode tierce. Où est la garantie qu'il ne le changera pas ?
Afin de dormir paisiblement, la collection peut être enveloppée dans un emballage spécial qui lèvera une exception lors de la tentative de modification de la collection.
Exemple:
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]
La méthode Collections.unmodifiableCollection() renvoie un wrapper sur la collection qui lui est transmise. Si vous appelez ses méthodes get() , size() , alors tout fonctionnera. Cependant, lors de l'appel des méthodes add() , set() , remove() , vous obtiendrez une exception.
java.lang.UnsupportedOperationException
at org.apache.commons.collections.collection.UnmodifiableCollection.add(UnmodifiableCollection.java:75)
En fait, la méthode est déjà marquée comme obsolète et il est recommandé d'utiliser Collections.unmodifiableCollection(Collection<? extend T> c) à la place .
Collection<String> firstCollection = new ArrayList<String>();
Collection<String> secondCollection =
Collections.unmodifiableCollection(firstCollection);
GO TO FULL VERSION