微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java 8中的Lambda表达式

我想使用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: ","."));

但这似乎不必要地过度的计算量.我迭代n超过1到100(因为假设我不知道n的最大值是多少),那么我映射该列表的三角数字函数,然后我检查哪些数字在100以下是否有更有效的方式在这样做?
另外:我可以使用Stream的iterate函数生成三角形数字,而不是使用iterate,limit,然后映射?

编辑:
所以这里的要点是:一旦三角形数字之一超过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表达式中保留这个效率?

解决方法

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

原文地址:https://www.jb51.cc/java/122697.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐