如何使用java函数接口实现生成完美数字的函数?
我正在尝试实现一个函数,该函数将返回一个到参数x的完美数字列表。我必须使用java函数接口和支持函数样式(流、过滤器、映射…)的类来实现它 我的函数应该执行以下操作如何使用java函数接口实现生成完美数字的函数?,java,Java,我正在尝试实现一个函数,该函数将返回一个到参数x的完美数字列表。我必须使用java函数接口和支持函数样式(流、过滤器、映射…)的类来实现它 我的函数应该执行以下操作 将参数x作为限制,并返回一个完整数字列表 在最外层,代码将过滤一个最多为x的列表,使用lambda比较n是否等于减少最内层过滤器的结果(foldLeft/从左开始减少) 最里面的部分有一个过滤器,其列表最多为(n-1)。此筛选器有一个lambda函数,用于检查n%x==0 我遇到的最大问题是使用最内层过滤器的结果实现缩减(
- 将参数x作为限制,并返回一个完整数字列表
- 在最外层,代码将过滤一个最多为x的列表,使用lambda比较n是否等于减少最内层过滤器的结果(foldLeft/从左开始减少)
- 最里面的部分有一个过滤器,其列表最多为(n-1)。此筛选器有一个lambda函数,用于检查n%x==0
public static List<Integer> generatePerfectList(int x) {
List<Integer> perfectList = new ArrayList<Integer>();
perfectList = IntStream.range(0, x)
// I am also getting an error "Incompatible operand types int and OptionalInt" in the following line
.filter(n -> (n == (IntStream.range(0, n-1).filter(x -> (0 == (n % x))).reduce(Integer::sum))))
.boxed().collect(Collectors.toList());
return perfectList;
}
public静态列表generatePerfectList(intx){
List perfectList=new ArrayList();
perfectList=IntStream.range(0,x)
//在下一行中,我还得到了一个错误“不兼容的操作数类型int和OptionalInt”
.filter(n->(n==(IntStream.range(0,n-1).filter(x->(0==(n%x))).reduce(Integer::sum)))
.boxed().collect(collector.toList());
返回完美列表;
}
试试这个
public static List<Integer> generatePerfectList(int x) {
return IntStream.range(1, x)
.filter(n -> n == IntStream.range(1, n).filter(i -> 0 == n % i).sum())
.boxed().collect(Collectors.toList());
}
输出:
[6, 28, 496]
你为什么要在lambda里做这件事?作为一种方法,它将更具可读性、可测试性和可调试性。同时,我正在学习Scheme,我被要求使用函数编程来实现一个java实现,以获得完美的数字。静态java方法是函数编程的一个示例。有趣的观察。从没想过也不知道谢谢@saka129。感谢您的回复!
[6, 28, 496]