如何不使用for循环创建1到n的整数列表?Java代码优化求助
实现动态生成1到n的序列并计算偶数平方和
嘿,这个需求很好解决,咱们可以用Java 8+的流API来实现类似Haskell里[1..n]的范围生成效果,全程不用for循环,还能让代码更简洁高效。
优化后的完整代码
private static int myFunction(int n) { return IntStream.rangeClosed(1, n) // 生成从1到n的整数流,等价于你想要的[1,...,n] .filter(x -> x % 2 == 0) // 筛选出偶数 .map(x -> x * x) // 计算每个偶数的平方 .sum(); // 对平方值求和,比reduce更直观 }
关键部分说明
IntStream.rangeClosed(1, n):这是核心,它会生成包含1到n(两端都包含)的原生整数流,完美替代你需要的动态列表,而且相比创建List<Integer>,原生int流避免了自动装箱/拆箱的性能开销。- 后续流操作:
filter、map和你原来的逻辑完全一致,最后用sum()替代reduce是因为IntStream专门提供了求和的便捷方法,当然如果坚持用reduce(0, Integer::sum)也能达到同样效果。
如果确实需要生成List
如果你不是直接要计算结果,而是需要先得到List<Integer> list = [1,...,n],可以这样写:
List<Integer> list = IntStream.rangeClosed(1, n) .boxed() // 将原生int转换为Integer对象 .collect(Collectors.toList());
同样全程没有for循环,完全用函数式风格实现。
这样修改后,当你传入n=7时,函数会正确返回56,而且可以支持任意正整数n,不再局限于固定的列表啦。
内容的提问来源于stack exchange,提问作者Filipe Nóbrega
相关产品推荐
相关产品推荐

