Collectors
Collectors 是 Java 8 加入的操作类,位于 java.util.stream 包下。它会根据不同的策略将元素收集归纳起来,比如最简单常用的是将元素装入Map、Set、List 等可变容器中。特别对于 Java 8 Stream Api 来说非常有用。它提供了collect() 方法来对 Stream 流进行终结操作派生出基于各种策略的结果集。
1 2 3 4 5 6
| List<String> language = new ArrayList<>(); language.add("Java"); language.add("PHP"); language.add("Python"); language.add("Go"); language.add("C#");
|
Java 8 中 Collectors 的方法
Collectors 提供了一系列的静态方法供我们使用,通常情况我们静态导入即可使用。
1 2 3 4 5
| Collectors.toList(); Collectors.toMap(); Collectors.toSet(); Collectors.toCollection(); Collectors.toConcurrentMap();
|
joining
将元素以某种规则连接起来。该方法有两种种重载 joining(CharSequence delimiter) 和 joining(CharSequence delimiter,CharSequence prefix,CharSequence suffix)
1 2 3 4 5 6 7 8
| language.stream().collect(Collectors.joining());
language.stream().collect(Collectors.joining("," ));
language.stream().collect(Collectors.joining(",", "[", "]"));
|
collectingAndThen
该方法先执行了一个归纳操作,然后再对归纳的结果进行 Function 函数处理输出一个新的结果。
1 2
| language.stream().collect(Collectors.collectingAndThen(Collectors.joining(","), String::toUpperCase));
|
groupingBy
按照条件对元素进行分组
1 2
| // 按照字符串长度进行分组,符合条件的元素将组成一个 List 映射到以条件长度为key 的 Map<Integer, List<String>> 中 language.stream().collect(Collectors.groupingBy(String::length))
|
counting
归纳元素的的数量
1 2
| language.stream().collect(Collectors.counting())
|
maxBy/minBy
这两个方法分别提供了查找大小元素的操作,它们基于比较器接口 Comparator 来比较 ,返回的是一个 Optional 对象。
1 2
| Optional<String> min = language.stream().collect(Collectors.minBy(Comparator.comparingInt(String::length)));
|
summingInt/Double/Long
用来做累加计算。计算元素某个属性的总和,类似 Mysql 的 sum 函数
1 2
| language.stream().collect(Collectors.summingInt(l -> l.length()));
|
summarizingInt/Double/Long
如果我们总数,总和,最大最小值这些都要呢,summarizingInt、summarizingDouble、summarizingLong这三个方法通过对元素某个属性的提取,会返回对元素该属性的统计数据对象,分别对应 IntSummaryStatistics、DoubleSummaryStatistics、LongSummaryStatistics。
1 2 3
| DoubleSummaryStatistics doubleSummaryStatistics = language.stream().collect(Collectors.summarizingDouble(String::length)); System.out.println(doubleSummaryStatistics.toString());
|
结果 DoubleSummaryStatistics 中包含了 总数,总和,最小值,最大值,平均值 五个值