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

  |   1 评论   |   1,399 浏览

**刚看到群里有个人提问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,就当随手笔记了…

评论

发表评论