Java Stream Collectors主要 API 详解
Collectors 是 Java 8 Stream API 的核心工具,用于将流的元素收集、分组、统计或转换为其他数据结构。以下是其主要 API 的使用方法与完整示例。
一、基础方法
1. Collectors.toList()
 
将流转换为 List。
List<String> list = Stream.of("a", "b", "c")
.collect(Collectors.toList());
2. Collectors.toSet()
 
将流转换为 Set(自动去重)。
Set<String> set = Stream.of("a", "a", "b")
.collect(Collectors.toSet());
3. Collectors.toCollection(Supplier)
 
自定义目标集合类型(如 LinkedList、ConcurrentHashMap)。
LinkedList<String> linkedList = Stream.of("a", "b", "c")
.collect(Collectors.toCollection(LinkedList::new));
二、映射与合并
4. Collectors.toMap
 
将流转换为 Map,需指定键和值的提取函数。
基础用法
Map<String, User> userMap = userList.stream()
.collect(Collectors.toMap(User::getId, user -> user));
处理键冲突
Map<String, User> userMap = userList.stream()
.collect(Collectors.toMap(
User::getId,
user -> user,
(existing, replacement) -> existing // 保留第一个
));
5. Collectors.collectingAndThen
 
在收集操作完成后对结果进行进一步处理。
示例 1:转换为不可变集合
Map<String, List<User>> usersByGender = userList.stream()
.collect(Collectors.groupingBy(
User::getGender,
Collectors.collectingAndThen(
Collectors.toList(),
Collections::unmodifiableList // 转换为不可变 List
)
));
示例 2:转换为数组
Map<String, User[]> usersByGenderAsArray = userList.stream()
.collect(Collectors.groupingBy(
User::getGender,
Collectors.collectingAndThen(
Collectors.toList(),
list -> list.toArray(new User[0]) // 转换为数组
)
