2020import java .util .stream .Stream ;
2121
2222/**
23- * 分区:分类的特殊情况。分区函数返回一个布尔值
23+ * 得到 100 以内的质数和非质数
24+ *
25+ * - 分区:分类的特殊情况。分区函数返回一个布尔值
26+ * - Collector
2427 */
2528public class PartitionPrimeNumbers {
2629
2730 public static void main (String ... args ) {
2831 System .out .println ("Numbers partitioned in prime and non-prime: " + partitionPrimes (100 ));
2932 System .out .println ("Numbers partitioned in prime and non-prime: " + partitionPrimesWithCustomCollector (100 ));
33+ System .out .println ("Numbers partitioned in prime and non-prime: " + partitionPrimesWithInlineCollector (100 ));
3034
3135 }
3236
@@ -62,22 +66,29 @@ public static <A> List<A> takeWhile(List<A> list, Predicate<A> p) {
6266 return list ;
6367 }
6468
69+ /**
70+ * Collector
71+ * 1.建立新的结果容器: supplier 方法
72+ * 2.将元素添到结果容器: accumulator 方法
73+ * 3.对容器应用最终转换: finisher 方法
74+ * 4.合并两个结果容器: combiner
75+ * 5.characteristics 方法
76+ */
6577 public static class PrimeNumbersCollector
6678 implements Collector <Integer , Map <Boolean , List <Integer >>, Map <Boolean , List <Integer >>> {
6779
6880 @ Override
6981 public Supplier <Map <Boolean , List <Integer >>> supplier () {
7082 return () -> new HashMap <Boolean , List <Integer >>() {{
71- put (true , new ArrayList <Integer >());
72- put (false , new ArrayList <Integer >());
83+ put (true , new ArrayList <>());
84+ put (false , new ArrayList <>());
7385 }};
7486 }
7587
7688 @ Override
7789 public BiConsumer <Map <Boolean , List <Integer >>, Integer > accumulator () {
7890 return (Map <Boolean , List <Integer >> acc , Integer candidate ) -> {
79- acc .get (isPrime (acc .get (true ),
80- candidate ))
91+ acc .get (isPrime (acc .get (true ), candidate ))
8192 .add (candidate );
8293 };
8394 }
@@ -102,17 +113,17 @@ public Set<Characteristics> characteristics() {
102113 }
103114 }
104115
105- public Map <Boolean , List <Integer >> partitionPrimesWithInlineCollector (int n ) {
116+ public static Map <Boolean , List <Integer >> partitionPrimesWithInlineCollector (int n ) {
106117 return Stream .iterate (2 , i -> i + 1 ).limit (n )
107118 .collect (
108119 () -> new HashMap <Boolean , List <Integer >>() {{
109- put (true , new ArrayList <Integer >());
110- put (false , new ArrayList <Integer >());
120+ put (true , new ArrayList <>());
121+ put (false , new ArrayList <>());
111122 }},
112- (acc , candidate ) -> {
113- acc .get (isPrime (acc .get (true ), candidate ))
114- .add (candidate );
115- } ,
123+ (acc , candidate ) ->
124+ acc .get (isPrime (acc .get (true ), candidate ))
125+ .add (candidate )
126+ ,
116127 (map1 , map2 ) -> {
117128 map1 .get (true ).addAll (map2 .get (true ));
118129 map1 .get (false ).addAll (map2 .get (false ));
0 commit comments