一、简介
Collectors 这个工具类主要功能是将流中的数据转换成集合类型。
二、常用方法介绍
2.1 Stream 转为 List
将数据收集到一个列表中,Stream 转换为 List,允许有重复值,有顺序。
public static void main(String[] args) {
Stream<String> stream = Stream.of("java","c","c++","python","java");
List<String> languageList = stream.collect(Collectors.toList());
languageList.forEach((p)->System.out.println(p));
}
// 第二种方式
public static void main(String[] args) {
List<String> languageList2 = Arrays.asList("java","c","c++","python","java");
languageList.forEach((p)->System.out.println(p));
// List 数组去重
List<String> list2= languageList2.stream().distinct().collect(Collectors.toList());
}
2.2 Stream 转为 Set
将数据收集进一个集合,Stream 转换为 Set,不允许重复值,没有顺序。
public static void main(String[] args) {
Stream<String> stream = Stream.of("java","c","c++","python","java");
Set<String> languageList = stream.collect(Collectors.toSet());
languageList.forEach((p)->System.out.println(p));
}
2.3 Stream 支持不同类型
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "python", "C++","php","java");
// 用 LinkedList 收集
List<String> linkedListResult = list.stream().collect(Collectors.toCollection(LinkedList::new));
linkedListResult.forEach((p)->System.out.println(p));
System.out.println("--------------");
// 用 CopyOnWriteArrayList 收集
List<String> copyOnWriteArrayListResult = list.stream()
.collect(Collectors.toCollection(CopyOnWriteArrayList::new));
copyOnWriteArrayListResult.forEach((p)->System.out.println(p));
System.out.println("--------------");
// 使用 treeSet 收集
Stream<String> stream = Stream.of("java","c","c++","python","java");
Set<String> treeSet = stream.collect(Collectors.toCollection(TreeSet::new));
treeSet.forEach((p)->System.out.println(p));
}
2.4 Stream 字符串拼接
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "python", "C++","php","java");
// 直接将输出结果拼接
System.out.println(list.stream().collect(Collectors.joining()));
// 每个输出结果之间加拼接符号"|"
System.out.println(list.stream().collect(Collectors.joining(" | ")));
// 输出结果开始头为Start--,结尾为--End,中间用拼接符号"||"
System.out.println(list.stream().collect(Collectors.joining(" || ","Start--","--End")));
}
2.5 Stream 转为 Map
可以使用 partitioningBy() 方法,分类成一个 key 为 True 和 Flase 的 Map。
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "python", "C++","php","java");
Map<Boolean, List<String>> result = list.stream()
.collect(Collectors.partitioningBy(s -> s.length() > 2));
}
2.6 Stream 数据收集
可以使用 collectingAndThen() 方法,收集之后继续做一些处理。
public static void main(String[] args) {
List<String> list = Arrays.asList("java", "python", "C++","php","java");
ImmutableList<String> collect = list.stream()
.collect(Collectors.collectingAndThen(Collectors.toList(), ImmutableList::copyOf));
}