我正在查看IntStream的文档,我看到了一个toArray方法,但没有办法直接到List<Integer>
IntStream
toArray
List<Integer>
肯定有一种方法可以将Stream转换为List?
Stream
List
IntStream::boxed
IntStream::boxed将IntStream转换为Stream<Integer>,然后你可以将collect转换为List:
Stream<Integer>
collect
theIntStream.boxed().collect(Collectors.toList())
boxed方法将IntStream的int基元值转换为Integer对象流。“boxing"这个词命名了int⬌Integer转换过程。看到甲骨文教程。
boxed
int
Integer
Java 16带来了更短的toList方法。产生一个无法改变的列表。在这里讨论。
toList
theIntStream.boxed().toList()
你可以使用Eclipse集合中提供的原始集合,并避免装箱。
MutableIntList list = IntStream.range(1, 5) .collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);
注意:我是Eclipse Collections的贡献者。
您还可以在流上使用mapToObj(),它接受一个IntFunction并返回一个对象值流,该流由将给定函数应用于该流的元素的结果组成。
List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());
找到以下使用Java 8查找每个int元素的平方的示例:-
IntStream ints = Arrays.stream(new int[] {1,2,3,4,5}); List<Integer> intsList = ints.map(x-> x*x) .collect(ArrayList<Integer>::new, ArrayList::add, ArrayList::addAll);
您可以使用collect方法:
IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);
事实上,当你在对象流上调用.collect(collections . tolist())时,这几乎就是Java所做的:
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); }
注意:第三个参数仅当你想运行并行收集时才需要;对于顺序收集,只提供前两个就足够了。