Я смотрю на документы для IntStream, и я вижу toArrayметод, но нет способа перейти непосредственно кList<Integer>
Конечно, есть способ конвертировать Streamв List?
Я смотрю на документы для IntStream, и я вижу toArrayметод, но нет способа перейти непосредственно кList<Integer>
Конечно, есть способ конвертировать Streamв List?
Ответы:
IntStream::boxedIntStream::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);
}
Примечание. Третий параметр необходим, только если вы хотите запустить параллельный сбор; для последовательного сбора достаточно первых двух.