Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Java8IntStream转换为列表?_Java_Java 8 - Fatal编程技术网

如何将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);
}