[英]How do I convert a Java 8 IntStream to a List?
我正在查看IntStream
的文档,我看到了一个toArray
方法,但无法直接转到List<Integer>
当然有一种方法可以将Stream
转换为List
吗?
IntStream::boxed
IntStream::boxed
将IntStream
转换为Stream<Integer>
,然后您可以将其collect
到List
:
theIntStream.boxed().collect(Collectors.toList())
boxed
方法将IntStream
的int
原始值转换为Integer
对象流。 “装箱”一词将int
⬌ Integer
转换过程命名为。 请参阅Oracle 教程。
Java 16 带来了更短的toList
方法。 产生一个不可修改的列表。 在这里讨论。
theIntStream.boxed().toList()
您还可以在 Stream 上使用 mapToObj(),它接受一个 IntFunction 并返回一个对象值 Stream,该对象值 Stream 由将给定函数应用于此流的元素的结果组成。
List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());
您可以使用Eclipse Collections 中提供的原始集合并避免装箱。
MutableIntList list =
IntStream.range(1, 5)
.collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);
注意:我是 Eclipse Collections 的贡献者。
您可以使用 collect 方法:
IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);
事实上,当你在对象流上调用 .collect(Collectors.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);
}
注意:第三个参数只有在运行并行收集时才需要; 对于顺序收集,仅提供前两个就足够了。
查找以下使用 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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.