Article du 11e jour du calendrier de l'avent Java 2017.
Mon nom est Mincho. J'habite entre Java et AWS.
Connaissez-vous les collections Eclipse? Développé par Goldman Sachs en 2004, il est ensuite devenu OSS et a été transféré à la Fondation Eclipse en 2015.
Qu'est-ce que les collections Eclipse? Parce que certains contenus de sont organisés dans d'autres matériaux Je vais me concentrer sur ce qui est cool et ce qui ne l'est pas.
Comme mentionné ci-dessus, le contenu général sera réimprimé, je vais donc l'omettre. Veuillez vous référer aux documents de référence énumérés ci-dessous.
Java 9 a également publié une méthode d'usine pour les collections, qui est immuable.
Eclipse Collections vous permet d'initialiser des collections telles que List, Set, Map avec une API unifiée.
MutableList<String> list = Lists.mutable.of();
MutableSet<String> set = Sets.mutable.of();
MutableMap<String, String> map = Maps.mutable.of();
//avec peut être utilisé à la place de
MutableList<String> list = Lists.mutable.with();
//La méthode d'appel est presque la même pour immuable
ImmutableList<String> list = Lists.immutable.of();
Eclipse Collenctions prend en charge les structures de données suivantes:
Structure de données | Primitive correspondante |
---|---|
List | |
Set | |
SortedSet | Ensemble commandé |
Bag | Dupliquer l'ensemble |
SortedBag | Sac commandé |
Map | |
BiMap | Carte bidirectionnelle |
SortedMap | Carte ordonnée |
Multimap | La valeur correspondant à la clé est une collection. liste, Set,Sélectionnable à partir du sac |
Stack | |
Pair | Données au format tuple |
PrimitiveCollection L'API Stream a également des flux primitifs tels que IntStream et LongStream, mais elle ne peut gérer que List-like en tant que structure de données. Il existe des collections primitives pour toutes les collections de la section précédente.
Cela fait une différence notable lors du traitement de grandes quantités de données avec plus d'efficacité de la mémoire que l'utilisation de classes wrapper.
Le problème avec Java8 était que les références de méthode n'étaient pas disponibles pour les méthodes qui prennent Predicate comme argument. Dans les collections Eclipse, certaines méthodes ont un suffixe avec, qui utilise efficacement les références de méthode.
//Ecrire en Java 8
boolean result = this.people.stream().anyMatch(person -> person.hasPet(PetType.CAT));
//Réécrit dans les collections Eclipse
boolean result = this.people.anySatisfy(person -> person.hasPet(PetType.CAT));
//Lors de l'utilisation avec
boolean result = this.people.anySatisfyWith(Person::hasPet, PetType.CAT);
(Extrait du document de référence 2)
Le problème avec l'API Stream était que le processus de «conversion de toutes les valeurs de la carte» ne pouvait pas être écrit de manière concise. MutableMap of Eclipse Collections a une méthode appelée keyValuesView, ce qui facilite le traitement de tous à la fois.
Maps.mutable.of("Key1", 1, "Key2", 2, "Key3", 3, "Key4", 4)
.keyValuesView() // RichIterable<Pair<String, Integer>>
.collect((k, v) -> Tuples.pair(k, v * 2))// RichIterable<Pair<String, Integer>>
.toMap();
Ce sont les méthodes qui existaient avant le développement d'Optionnel. L'appel de ces méthodes sur une collection vide lève une NoSuchElementException. Un chèque vide est requis lors de son utilisation.
J'ai écrit cela, mais RichIterable # minOptional et RichIterable # maxOptional ont été ajoutés dans Eclipse Collections 8.2. Pas de faiblesses ...?
Je n'ai pas écrit ce que je pensais être bon subjectivement. Il y a encore peu d'articles sur les collections Eclipse dans Qiita, donc si vous l'utilisez, faisons un travail missionnaire ensemble!