Я смотрю на документы для IntStream
, и я вижу toArray
метод, но нет способа перейти непосредственно кList<Integer>
Конечно, есть способ конвертировать Stream
в List
?
Я смотрю на документы для IntStream
, и я вижу toArray
метод, но нет способа перейти непосредственно кList<Integer>
Конечно, есть способ конвертировать Stream
в List
?
Ответы:
IntStream::boxed
IntStream::boxed
превращает IntStream
в Stream<Integer>
, который вы можете затем collect
в List
:
theIntStream.boxed().collect(Collectors.toList())
boxed
Метод преобразует int
примитивные значения IntStream
в поток Integer
объектов. Слово «бокс» называет int
⬌ Integer
процесс преобразования. Смотрите Oracle Tutorial .
toList
. Это делается путем размещения следующих среди импорта файла: static import java.util.stream.Collectors.toList;
. Тогда вызов вызова читает просто .collect(toList())
.
Collectors
класса в Предпочтения -> Java -> Редактор -> Помощник по содержимому -> Избранное . После этого вам нужно всего лишь toLi
нажать Ctrl + Space, чтобы заполнить IDE toList
и добавить статический импорт.
boxed()
часть
Вы также можете использовать mapToObj () в потоке, который принимает IntFunction и возвращает объектно-ориентированный поток, состоящий из результатов применения данной функции к элементам этого потока.
List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());
boxed()
делегирует.
Вы можете использовать примитивные коллекции, доступные в Eclipse Collections, и избегать бокса.
MutableIntList list =
IntStream.range(1, 5)
.collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);
Примечание: я участвую в коллекциях Eclipse.
MutableIntList list = IntLists.mutable.withAll(IntStream.range(1, 5))
Вы можете использовать метод сбора:
IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);
Фактически, это почти то же самое, что делает Java, когда вы вызываете .collect (Collectors.toList ()) в потоке объекта:
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);
}
Примечание. Третий параметр необходим, только если вы хотите запустить параллельный сбор; для последовательного сбора достаточно первых двух.