Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java函数接口实现生成完美数字的函数?_Java - Fatal编程技术网

如何使用java函数接口实现生成完美数字的函数?

如何使用java函数接口实现生成完美数字的函数?,java,Java,我正在尝试实现一个函数,该函数将返回一个到参数x的完美数字列表。我必须使用java函数接口和支持函数样式(流、过滤器、映射…)的类来实现它 我的函数应该执行以下操作 将参数x作为限制,并返回一个完整数字列表 在最外层,代码将过滤一个最多为x的列表,使用lambda比较n是否等于减少最内层过滤器的结果(foldLeft/从左开始减少) 最里面的部分有一个过滤器,其列表最多为(n-1)。此筛选器有一个lambda函数,用于检查n%x==0 我遇到的最大问题是使用最内层过滤器的结果实现缩减(

我正在尝试实现一个函数,该函数将返回一个到参数x的完美数字列表。我必须使用java函数接口和支持函数样式(流、过滤器、映射…)的类来实现它

我的函数应该执行以下操作

  • 将参数x作为限制,并返回一个完整数字列表

  • 在最外层,代码将过滤一个最多为x的列表,使用lambda比较n是否等于减少最内层过滤器的结果(foldLeft/从左开始减少)

  • 最里面的部分有一个过滤器,其列表最多为(n-1)。此筛选器有一个lambda函数,用于检查n%x==0

我遇到的最大问题是使用最内层过滤器的结果实现缩减(foldl)

这是我的密码:

    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]