在Java中,Collectors 类是 Java Stream API 的一部分,它位于 java.util.stream.Collectors 包中。Collectors 类提供了许多有用的收集器(Collector),这些收集器可以在流操作(如 map(), filter(), reduce() 等)之后使用,以将流中的元素累积到集合(如 List, Set, Map 等)或其他数据结构中。
Collectors 类提供了一系列静态工厂方法来创建不同类型的收集器,包括:
转换为集合:如 toList(), toSet(), toCollection() 等。 汇总操作:如 summingInt(), averagingDouble(), counting(), maxBy(), minBy() 等。 分组操作:如 groupingBy(), partitioningBy() 等。 连接操作:如 joining()(用于字符串)。 映射操作:如 mapping()(结合其他收集器)。
以下是一些 Collectors 类的常见用法示例:
将流中的元素收集到列表中:
计算流中元素的数量:
将流中的元素分组到Map中:
对流中的元素进行过滤和求和:
连接字符串流中的元素:
转换Map:toMap
解释
请注意,我还添加了一个合并函数 (oldValue, newValue) -> newValue
,这是 Collectors.toMap
的一个可选参数。在多个元素映射到相同的键时,合并函数会被调用以决定新值和旧值应该如何合并。在这个例子中,我简单地选择了新值来覆盖旧值。
此外,我添加了 LinkedHashMap::new
作为 Collectors.toMap
的最后一个参数,以确保结果 Map
保持插入顺序(如果这是您所期望的)。如果您不关心顺序,可以省略这个参数。
自定义收集器:
Collectors 类也提供了 Collector 接口的实现工具,如 Collector.of(),允许你创建自定义的收集器。
使用 Collectors 类可以极大地简化流操作的结果收集过程,并使得代码更加简洁和易读。