Ich schaue in den Dokumenten nach IntStreamund sehe eine toArrayMethode, aber keine Möglichkeit, direkt zu einer zu gelangenList<Integer>
Sicher gibt es eine Möglichkeit, a Streamin a umzuwandeln List?
Ich schaue in den Dokumenten nach IntStreamund sehe eine toArrayMethode, aber keine Möglichkeit, direkt zu einer zu gelangenList<Integer>
Sicher gibt es eine Möglichkeit, a Streamin a umzuwandeln List?
Antworten:
IntStream::boxedIntStream::boxedverwandelt ein IntStreamin ein Stream<Integer>, das Sie dann collectin ein List:
theIntStream.boxed().collect(Collectors.toList())
Die boxedMethode konvertiert die intprimitiven Werte von IntStreamin in einen Objektstrom Integer. Das Wort "Boxen" bezeichnet den int⬌- IntegerKonvertierungsprozess. Siehe Oracle Tutorial .
toList. Dazu setzen Sie Folgendes unter die Importe der Datei : static import java.util.stream.Collectors.toList;. Dann liest der Sammelruf gerade .collect(toList()).
CollectorsKlasse unter Einstellungen -> Java -> Editor -> Inhaltsassistent -> Favoriten hinzu . Danach müssen Sie nur noch toLibei gedrückter Strg + Leertaste eingeben , damit die IDE ausgefüllt toListund der statische Import hinzugefügt wird.
boxed()Teil hingewiesen haben
Sie können auch mapToObj () für einen Stream verwenden, der eine IntFunction verwendet und einen Stream mit Objektwert zurückgibt, der aus den Ergebnissen der Anwendung der angegebenen Funktion auf die Elemente dieses Streams besteht.
List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());
boxed()delegiert dies an.
Sie können primitive Sammlungen verwenden, die in Eclipse- Sammlungen verfügbar sind, und das Boxen vermeiden.
MutableIntList list =
IntStream.range(1, 5)
.collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);
Hinweis: Ich bin ein Mitarbeiter von Eclipse Collections.
MutableIntList list = IntLists.mutable.withAll(IntStream.range(1, 5))
Sie können die Erfassungsmethode verwenden:
IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);
Tatsächlich ist dies fast genau das, was Java tut, wenn Sie .collect (Collectors.toList ()) für einen Objektstrom aufrufen:
public static <T> Collector<T, ?, List<T>> toList() {
return new Collectors.CollectorImpl(ArrayList::new, List::add, (var0, var1) -> {
var0.addAll(var1);
return var0;
}, CH_ID);
}
Hinweis: Der dritte Parameter ist nur erforderlich, wenn Sie die parallele Erfassung ausführen möchten. Für die sequentielle Sammlung reichen nur die ersten beiden aus.