[JAVA] Ce qui est cool avec les collections Eclipse Ce qui n'est pas cool

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.

Qu'est-ce que les collections Eclipse?

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.

Où c'est cool

API de méthode d'usine unifiée

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

Il existe de nombreuses structures de données (en particulier Multimap et Partition)

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.

Il existe une méthode qui peut utiliser une référence de méthode comme argument

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)

Facile à parcourir sur la carte

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

Où ce n'est pas cool

RichIterable # min, RichIterable # max jette NoSuchElementException

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 ...?

à la fin

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!

Matériel de référence

  1. https://www.eclipse.org/collections/ja/
  2. http://www.goldmansachs.com/gs-collections/documents/2015-11-28_JJUG_CCC.pdf
  3. http://slides.com/nashcft/jjug_ccc_2017_fall/

Recommended Posts

Ce qui est cool avec les collections Eclipse Ce qui n'est pas cool
À propos d'Eclipse MicroProfile Config
Fiche technique des collections Eclipse