繁多准则

Single responsibility

一个类或模块应仅有一个引起其变动的因素(职责)

一个办法只做一件事

首先看一个计算质数的例子:

   /**     * 计算给定的数范畴内有多少个质数     *     */    public long countPrimes(int max){        long total = 0;        for (int i = 2; i <= max ; i++) {            boolean isPrime = true;            for (int j = 2; j < i ; j++) {                if (i % j == 0){                    isPrime = false;                    break;                }            }            if (isPrime){                System.out.println(i);                total++;            }        }        return total;    }

这个办法中做了两件事,1. 判断是否是质数, 2. 计数

当初把这个办法中判断是否是质数提取进去

   /**     * 计算给定的数范畴内有多少个质数     *     */    public long countPrimes2(int max){        long total = 0;        for (int i = 2; i <= max ; i++) {            boolean isPrime = isPrime(i);            if (isPrime){                System.out.println(i);                total++;            }        }        return total;    }   /**     *  判断是否是质数     */    private boolean isPrime(int i) {        boolean isPrime = true;        for (int j = 2; j < i; j++) {            if (i % j == 0) {                isPrime = false;                break;            }        }        return isPrime;    }

这样每个办法只做一件事.然而在java8之后用流代替循环操作.

如果须要对一个很大的数计数,能够并行操作。线程模型也是代码的职责之一!

   /**     * java8应用流式计算质数个数     * @param max     * @return     */    public long countPrimes3(int max){        return IntStream.range(2, max)                .peek(System.out::println)                .filter(this::isPrime8)                .count();    }    private boolean isPrime8(int num){        boolean flag = IntStream.range(2, num)                .anyMatch(j -> num % j == 0);        return !flag;    }

这里留神和下面略微有点不一样的,IntStream.range(2, max)蕴含下界不蕴含上届

例如:

IntStream.range(2,6)         .forEach(System.out::println);// 只会输入2345

range()办法不会输入最大的数
参考<<java8函数式编程>>