[JAVA] Was ist cool an Eclipse-Sammlungen? Was ist nicht cool?

Java Adventskalender 2017 Tag 11 Artikel.

Ich heiße Mincho. Ich lebe zwischen Java und AWS.

Kennen Sie Eclipse-Sammlungen? Es wurde 2004 von Goldman Sachs entwickelt und später zu OSS. 2015 wurde es an die Eclipse Foundation übertragen.

Was sind Eclipse-Sammlungen? Weil einige der Inhalte von in anderen Materialien organisiert sind Ich werde mich darauf konzentrieren, was cool ist und was nicht.

Was sind Eclipse-Sammlungen?

Wie oben erwähnt, wird der allgemeine Inhalt nachgedruckt, daher werde ich ihn weglassen. Bitte beachten Sie die unten aufgeführten Referenzmaterialien.

Wo es cool ist

Unified Factory-Methoden-API

Java 9 hat auch eine Factory-Methode für Sammlungen veröffentlicht, die unveränderlich ist.

Mit Eclipse Collections können Sie Sammlungen wie List, Set, Map mit einer einheitlichen API initialisieren.

MutableList<String> list = Lists.mutable.of(); 
MutableSet<String> set = Sets.mutable.of();
MutableMap<String, String> map = Maps.mutable.of();

//mit kann anstelle von verwendet werden
MutableList<String> list = Lists.mutable.with(); 

//Die aufrufende Methode ist für unveränderlich fast dieselbe
ImmutableList<String> list = Lists.immutable.of(); 

Es gibt viele Datenstrukturen (insbesondere Multimap und Partition).

Eclipse Collenctions unterstützt die folgenden Datenstrukturen:

Datenstruktur Entsprechendes Primitiv
List
Set
SortedSet Bestelltes Set
Bag Doppelter Satz
SortedBag Bestellte Tasche
Map
BiMap Bidirektionale Karte
SortedMap Bestellte Karte
Multimap Der dem Schlüssel entsprechende Wert ist eine Sammlung. Aufführen, Set,Auswählbar aus Tasche
Stack
Pair Daten im Tupelformat

PrimitiveCollection Die Stream-API verfügt auch über primitive Streams wie IntStream und LongStream, kann jedoch nur List-like als Datenstruktur verarbeiten. Es gibt primitive Sammlungen für alle Sammlungen im vorherigen Abschnitt.

Dies macht einen spürbaren Unterschied bei der Verarbeitung großer Datenmengen mit höherer Speichereffizienz als bei der Verwendung von Wrapper-Klassen.

Es gibt eine Methode, die eine Methodenreferenz als Argument verwenden kann

Das Problem mit Java8 war, dass für Methoden, die Predicate als Argument verwenden, keine Methodenreferenzen verfügbar waren. In Eclipse-Sammlungen haben einige Methoden ein Suffix mit, wodurch Methodenreferenzen effektiv verwendet werden.

//Schreiben in Java 8
boolean result = this.people.stream().anyMatch(person -> person.hasPet(PetType.CAT));
//In Eclipse-Sammlungen umgeschrieben
boolean result = this.people.anySatisfy(person -> person.hasPet(PetType.CAT));
//
boolean result = this.people.anySatisfyWith(Person::hasPet, PetType.CAT);

(Zitiert aus Referenzmaterial 2)

Einfach auf der Karte zu iterieren

Das Problem mit der Stream-API war, dass der Prozess des "Konvertierens aller Werte in der Map" nicht präzise geschrieben werden konnte. MutableMap von Eclipse-Sammlungen verfügt über eine Methode namens keyValuesView, mit der die Verarbeitung auf einmal vereinfacht wird.

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

Wo es nicht cool ist

RichIterable # min, RichIterable # max werfen NoSuchElementException

Dies sind die Methoden, die vor der Entwicklung von Optional existierten. Das Aufrufen dieser Methoden für eine leere Auflistung löst eine NoSuchElementException aus. Bei Verwendung ist ein leerer Scheck erforderlich.

Keine Schwächen ...?

schließlich

Ich habe nicht geschrieben, was ich subjektiv für gut hielt. Es gibt noch wenige Artikel über Eclipse-Sammlungen in Qiita. Wenn Sie sie also verwenden, lassen Sie uns gemeinsam Missionsarbeit leisten!

Referenzmaterial

  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

Was ist cool an Eclipse-Sammlungen? Was ist nicht cool?
Informationen zur Eclipse MicroProfile-Konfiguration
Eclipse Sammlungen Cheet Sheet