Ich schaue in den Dokumenten nach IntStream
und sehe eine toArray
Methode, aber keine Möglichkeit, direkt zu einer zu gelangenList<Integer>
Sicher gibt es eine Möglichkeit, a Stream
in a umzuwandeln List
?
Ich schaue in den Dokumenten nach IntStream
und sehe eine toArray
Methode, aber keine Möglichkeit, direkt zu einer zu gelangenList<Integer>
Sicher gibt es eine Möglichkeit, a Stream
in a umzuwandeln List
?
Antworten:
IntStream::boxed
IntStream::boxed
verwandelt ein IntStream
in ein Stream<Integer>
, das Sie dann collect
in ein List
:
theIntStream.boxed().collect(Collectors.toList())
Die boxed
Methode konvertiert die int
primitiven Werte von IntStream
in in einen Objektstrom Integer
. Das Wort "Boxen" bezeichnet den int
⬌- Integer
Konvertierungsprozess. 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())
.
Collectors
Klasse unter Einstellungen -> Java -> Editor -> Inhaltsassistent -> Favoriten hinzu . Danach müssen Sie nur noch toLi
bei gedrückter Strg + Leertaste eingeben , damit die IDE ausgefüllt toList
und 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.