gpt4 book ai didi

Java Stream Collectors.toList() 不会编译

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:37:31 25 4
gpt4 key购买 nike

谁能解释为什么下面的代码无法编译但第二个可以编译?

不编译

private void doNotCompile() {

List<Integer> out;
out = IntStream
.range(1, 10)
.filter(e -> e % 2 == 0)
.map(e -> Integer.valueOf(2 * e))
.collect(Collectors.toList());

System.out.println(out);
}

collect 行的编译错误

  • IntStream 类型中的方法 collect(Supplier, ObjIntConsumer, BiConsumer) 不适用于参数 (Collector>)
  • 类型不匹配:无法从 Collector> 转换为 Supplier

编译

private void compiles() {
List<Integer> in;

in = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
List<Integer> out;
out = in.stream()
.filter(e -> e % 2 == 0)
.map(e -> 2 * e)
.collect(Collectors.toList());

System.out.println(out);
}

最佳答案

IntStream没有 collect接受 Collector 的方法.如果你想要 List<Integer> , 你必须装箱 IntStream进入 Stream<Integer> :

out = IntStream
.range(1, 10)
.filter(e -> e % 2 == 0)
.map(e -> 2 * e)
.boxed()
.collect(Collectors.toList());

.map().boxed() 的替代品是mapToObj() :

out = IntStream
.range(1, 10)
.filter(e -> e % 2 == 0)
.mapToObj(e -> 2 * e)
.collect(Collectors.toList ());

或者您可以使用 IntStream collect方法:

out = IntStream
.range(1, 10)
.filter(e -> e % 2 == 0)
.map(e -> 2 * e)
.collect(ArrayList<Integer>::new, ArrayList::add, ArrayList::addAll);

关于Java Stream Collectors.toList() 不会编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46827927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com