首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用java函数接口实现生成完美数字的函数?

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

Stack Overflow用户
提问于 2021-03-14 01:55:43
回答 1查看 66关注 0票数 1

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

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

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

在最外层的

  • 中,代码将筛选到x的列表,使用lambda来比较n是否等于减少最内部过滤器(foldLeft/从左开始减少)

的结果。

最内部的

  • 有一个过滤器,其列表最多可达(n - 1)。此过滤器具有一个lambda函数,用于检查n%x == 0.

是否为n%x。

我最有麻烦的地方是用最里面的过滤器来实现缩减(foldl)。

这是我的代码:

代码语言:javascript
复制
    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;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-14 06:45:18

尝尝这个。

代码语言:javascript
复制
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());
}

代码语言:javascript
复制
System.out.println(generatePerfectList(1000));

产出:

代码语言:javascript
复制
[6, 28, 496]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66620360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档