在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 类的常见用法示例:
将流中的元素收集到列表中:
List<String> list = Arrays.asList("a", "b", "c");
List<String> collectedList = list.stream().collect(Collectors.toList());
计算流中元素的数量:
long count = list.stream().collect(Collectors.counting());
将流中的元素分组到Map中:
Map<Character, List<String>> groupedByFirstChar = list.stream()
.collect(Collectors.groupingBy(s -> s.charAt(0)));
对流中的元素进行过滤和求和:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
int sum = numbers.stream()
.filter(n -> n % 2 == 0) // 过滤偶数
.mapToInt(Integer::intValue) // 转换为int流
.sum(); // 求和
// 使用Collectors.summingInt
int sumUsingCollectors = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.summingInt(Integer::intValue));
连接字符串流中的元素:
List<String> words = Arrays.asList("Hello", "world", "!");
String sentence = words.stream()
.collect(Collectors.joining(" ")); // 使用空格连接
自定义收集器:
Collectors 类也提供了 Collector 接口的实现工具,如 Collector.of(),允许你创建自定义的收集器。
使用 Collectors 类可以极大地简化流操作的结果收集过程,并使得代码更加简洁和易读。