gpt4 book ai didi

java - Java 8 中的 Lambda 表达式

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:26 26 4
gpt4 key购买 nike

我想使用 lambda 表达式而不是 for 循环生成数字列表。

假设我想生成一个包含所有小于 100 的三角数的列表。三角数是遵循以下公式的数字:(n*n+n)/2

这样做的最佳方法是什么?目前我有这个:

    Stream.iterate(1, n -> n + 1).limit(100)
.map(n -> (n * n + n) / 2)
.filter(a -> a < 100)
.map(a -> a + "")
.collect(Collectors.joining(", ", "Numbers: ", "."));

但这对于计算量来说似乎不必要地矫枉过正。我在 1 到 100 之间迭代 n(因为假设我不知道 n 的最大值是多少),然后我映射该列表的三角形数函数,然后我检查哪些数字低于 100。是否有更有效的方法在做这个?另外:我可以只使用 Stream 的迭代函数而不是使用迭代、限制然后映射来生成三角形数吗?

编辑:所以这里的要点是:如何在其中一个三角形数超过 100 时立即停止计算三角形数?通常我会这样写:

ArrayList<Integer> triangles = new ArrayList<>(); 
for (int n=1;true;n++) {
int num = (n*n+n)/2;

if (num>100) break;

triangles.add(num);
}

一旦三角形数超过100就停止,效率很高;如何在 lambda 表达式中保持这种效率?

最佳答案

在一般情况下,您正在寻找的是 take-while。不幸的是,它在 Java 8 流中没有默认实现。查看question about take-while .

关于java - Java 8 中的 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30693975/

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