Java Stream API的引入极大地简化了集合(Collection)的处理方式,使得开发者能够以声明式的方式处理数据集合。其中,Collector接口是Stream API中一个非常重要的组成部分,它提供了一种灵活的方式来收集Stream处理的结果。
Collector接口是Java 8中引入的一个泛型接口,它位于java.util.stream
包下。Collector接口主要用于将Stream中的元素收集到某种容器中,如List、Set、Map等。Collector接口定义了四个核心方法(以及一个枚举类型),这些方法共同协作完成收集任务。
Collector接口中的Characteristics枚举定义了三个可能的特征值:
Collector接口的实现通常通过Collectors工具类中的静态方法来完成。Collectors类提供了大量的静态方法,这些方法返回不同类型的Collector实例,以满足不同的收集需求。
toList():将Stream中的元素收集到一个List中。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> collectedNames = names.stream().collect(Collectors.toList());
toSet():将Stream中的元素收集到一个Set中,自动去重。
Set<String> uniqueNames = names.stream().collect(Collectors.toSet());
toMap():将Stream中的元素按照指定的键值对收集到一个Map中。
Map<Integer, String> ageMap = names.stream()
.collect(Collectors.toMap(name -> name.length(), name -> name));
groupingBy():根据某个属性对流中的元素进行分组。
List<Person> people = Arrays.asList(new Person("Alice", 30), new Person("Bob", 25));
Map<Integer, List<Person>> byAge = people.stream()
.collect(Collectors.groupingBy(Person::getAge));
在Stream的收集过程中,Collector接口的方法按以下顺序执行: