gpt4 book ai didi

java - 数字数字的递归总和(直到数字小于 10)仅限 java 8 lambdas

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

我只是练习lamdas java 8,我的问题如下

将一个整数中的所有数字相加,直到它小于 10(意味着只剩下一个数字)并检查它是否为 1

示例输入 1

100

示例输出 1

1 // true because its one

示例输入 2

55

示例输出 2

1     ie  5+5 = 10 then 1+0 = 1 so true

我写了一段代码

System.out.println(Arrays.asList( String.valueOf(number).split("") ).stream()
.map(Integer::valueOf)
.mapToInt(i->i)
.sum() == 1);

它适用于输入 1,即 100 但不适用于输入 2,即 55,我清楚地知道在第二种情况下 10 是输出,因为迭代不是递归的。

那么我怎样才能使这个 lambda 表达式递归,以便它也可以在第二种情况下工作?我可以使用该 lambda 表达式创建一个方法并每次调用它直到返回值 < 10 但我在想 lambda 中是否有任何方法。

谢谢

最佳答案

如果你想要一个纯 lambda 解决方案,你应该忘记让它递归,因为绝对没有理由将迭代过程实现为递归:

Stream.iterate(String.valueOf(number),
n -> String.valueOf(n.codePoints().map(Character::getNumericValue).sum()))
.filter(s -> s.length()==1)
.findFirst().ifPresent(System.out::println);

Demo

关于java - 数字数字的递归总和(直到数字小于 10)仅限 java 8 lambdas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33328025/

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