如何将Java8IntStream转换为列表?
我正在查看如何将Java8IntStream转换为列表?,java,java-8,Java,Java 8,我正在查看IntStream的文档,我看到了一个toArray方法,但无法直接进入列表 当然有一种方法可以将流转换为列表?IntStream::boxed 将转换为,然后可以将其转换为: 方法将IntStream的int原语值转换为对象流。这个词命名为int⬌ 整数转换过程。看 Java 16及更高版本 Java16带来了更短的方法。产生一个。讨论过 您可以使用中提供的基元集合并避免装箱 MutableIntList list = IntStream.range(1, 5) .
IntStream
的文档,我看到了一个toArray
方法,但无法直接进入列表
当然有一种方法可以将流
转换为列表
?IntStream::boxed
将转换为,然后可以将其转换为:
方法将IntStream
的int
原语值转换为对象流。这个词命名为int
⬌ <代码>整数转换过程。看
Java 16及更高版本
Java16带来了更短的方法。产生一个。讨论过
您可以使用中提供的基元集合并避免装箱
MutableIntList list =
IntStream.range(1, 5)
.collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);
注意:我是Eclipse集合的参与者。您也可以在流上使用mapToObj(),它接受一个IntFunction并返回一个对象值流,该流包含将给定函数应用于该流元素的结果
List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());
List 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);
IntStream ints=Arrays.stream(新的int[]{1,2,3,4,5});
List intsList=ints.map(x->x*x)
.collect(ArrayList::new,ArrayList::add,ArrayList::addAll);
您可以使用collect方法:
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);
}
公共静态收集器toList(){
返回新收集器。CollectorImpl(ArrayList::new,List::add,(var0,var1)->{
var0.addAll(var1);
返回变量0;
}(chiu ID),;
}
注意:第三个参数仅在要运行并行采集时才是必需的;对于顺序收集,只提供前两个就足够了。尝试以下链接:@KarlRichter另一个问题不会提供键入的列表。另外,这个问题是四年前提出来的,答案是300多票。为什么我们现在要合并它?@skiwi我的意思是,在这之后,所有其他的答案都不需要了,因为它们不是那么自然。谢谢你,我还没有看到boxed方法,它工作起来很有魅力。在Eclipse中,可以让IDE为方法添加静态导入。这是通过在Preferences->Java->Editor->Content Assist->Favorites中添加
收集器
类来完成的。在此之后,您只需在点击Ctr+空格时键入toLi
即可让IDE填写toList
,并添加静态导入。我对我尝试过的方法的错误感到非常愤怒,感谢您指出boxed()
partI很高兴得到这个答案——更广泛地说,Java 8中的这些功能。回顾两年来在Python中的工作,我很高兴我不必处理这些废话。尽管Eclipse集合通常非常有用,但这看起来并没有使任何事情变得更简单:)自从EC9.0以来,您可以从一个基本流构建一个基本列表MutableIntList list=IntLists.mutable.withAll(IntStream.range(1,5))
这就是我要找的。。将int流装箱到Integer或object是不同的事情讽刺的是,这就是boxed()
所委托的内容。最后一句话解释了这一切。
IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);
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);
}