gpt4 book ai didi

java - 我使用 IntStream 和 forEach 创建整数列表的方法有什么问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:26:36 27 4
gpt4 key购买 nike

我的原始代码是:

class ${
public static void main(String[] _) {
final List<Integer> ints = new ArrayList<>();
IntStream.iterate(0, i -> i++).limit(5).forEach(val -> ints.add(val));
System.out.println(ints);
}
}

我期望在控制台中看到以下内容:

[0, 1, 2, 3, 4]

但实际情况是:

[0, 0, 0, 0, 0]

这可能是非常简单的事情,但我错过了什么?

最佳答案

i++ 在递增之前 的值为 i。您需要使用前缀运算符。

IntStream.iterate(0, i -> ++i).limit(5).forEach(val -> ints.add(val));

实际上,不要那样做。没有理由改变 i,它只是被丢弃了。使用无副作用版本。毕竟,这就是函数式编程背后的全部理念:避免副作用。

IntStream.iterate(0, i -> i + 1).limit(5).forEach(val -> ints.add(val));

对于连续整数流的特定情况,您可以将 iteratelimit 替换为 range :

IntStream.range(0, 5).forEach(val -> ints.add(val));

最后,最好将流收集到一个列表中,而不是使用 forEach 添加值。它直接表达了创建列表的意图,这再次避免了副作用。

List<Integer> ints = IntStream.range(0, 5).boxed().collect(Collectors.toList());

关于java - 我使用 IntStream 和 forEach 创建整数列表的方法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53182741/

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