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.
Wie oben erwähnt, wird der allgemeine Inhalt nachgedruckt, daher werde ich ihn weglassen. Bitte beachten Sie die unten aufgeführten Referenzmaterialien.
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();
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.
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)
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();
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 ...?
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!