Patrzę na dokumenty dla IntStreami widzę toArraymetodę, ale nie ma sposobu, aby przejść bezpośrednio doList<Integer>
Z pewnością istnieje sposób na konwersję A Streamna List?
Patrzę na dokumenty dla IntStreami widzę toArraymetodę, ale nie ma sposobu, aby przejść bezpośrednio doList<Integer>
Z pewnością istnieje sposób na konwersję A Streamna List?
Odpowiedzi:
IntStream::boxedIntStream::boxedzamienia an IntStreamw Stream<Integer>, a następnie collectw List:
theIntStream.boxed().collect(Collectors.toList())
Ta boxedmetoda przekształca intprymitywne wartości IntStreamw strumień Integerobiektów. Słowo „boks” nazywa proces konwersji int⬌ Integer. Zobacz samouczek Oracle .
toList. Odbywa się to poprzez umieszczenie następujących wśród importu pliku: static import java.util.stream.Collectors.toList;. Następnie połączenie odbiera tylko .collect(toList()).
Collectorsklasy w Preferencjach -> Java -> Edytor -> Content Assist -> Ulubione . Następnie wystarczy wpisać toLiw Ctr + Spacja, aby wypełnić IDE toListi dodać import statyczny.
boxed()część
Możesz także użyć mapToObj () w strumieniu, który pobiera IntFunkcję i zwraca obiektowy strumień składający się z wyników zastosowania danej funkcji do elementów tego strumienia.
List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());
boxed()deleguje.
Możesz używać prymitywnych kolekcji dostępnych w Eclipse Collections i unikać boksu.
MutableIntList list =
IntStream.range(1, 5)
.collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);
Uwaga: Jestem współtwórcą kolekcji Eclipse.
MutableIntList list = IntLists.mutable.withAll(IntStream.range(1, 5))
Możesz użyć metody zbierania:
IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);
W rzeczywistości jest to prawie dokładnie to, co robi Java, gdy wywołujesz .collect (Collectors.toList ()) w strumieniu obiektów:
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);
}
Uwaga: Trzeci parametr jest wymagany tylko wtedy, gdy chcesz uruchomić równoległą kolekcję; do zbierania sekwencyjnego wystarczy podać tylko dwa pierwsze.