Solo  当前访客:367 登录 注册

Java8特性详解--Streams API 实战之 分解质因数

    **刚看到群里有个人提问100如何分解为2*2*5*5的形式…于是随手丢了一个demo出来 **

    直接上源码,过程详见注释:

    @Test
    public void test() {
        //原始数据
      int source = 100;
        //质因数合集
      List list = new ArrayList<>();
        //分解质因数
      memeda(list, source);
        //输出质因数合剂
      System.out.println(list);
        //还原质因数乘积
      int target = list.stream().reduce((t, i) -> t * i).get();
        //验证结论
      Assert.assertEquals(source, target);
    }
    
    public static void memeda(List children, int source) {
        if (source > 1) {
            children.add(
                    Optional.ofNullable(
                            IntStream.range(2, source)
                                    .filter(i -> source % i == 0)
                                    .findFirst()
                    ).get().orElse(source)
            );
            memeda(children, source / children.get(children.size() - 1));
        }
    }
    

    输出内容为:

    [2, 2, 5, 5]
    1 test passed
    

    本例使用java8的stream api,就当随手笔记了…

    17-09-07 09:40 washmore
    标签: , , ,
    骚骚
    17-09-07 09:48 回复»

    :smile:

    validate
    TOP