⼀个终端操作, ⽤于对流中的数据进⾏归集操作,collect⽅法接受的参数是⼀个Collector
有两个重载⽅法,在Stream接⼝⾥⾯
//重载⽅法⼀
<R> R collect(Supplier<R> supplier, BiConsumer<R, ? super T>
accumulator, BiConsumer<R, R>combiner);
//重载⽅法⼆
<R, A> R collect(Collector<? super T, A, R> collector);
Collectors.toList()
Collectors.toMap()
Collectors.toSet()
public static <T>
Collector<T, ?, List<T>> toList() {
return new CollectorImpl<>((Supplier<List<T>>) ArrayList::new, List::add,
(left, right) -> { left.addAll(right); return left; },
CH_ID);
}
ArrayList::new,创建⼀个ArrayList作为累加器
List::add,对流中元素的操作就是直接添加到累加器中
reduce操作, 对⼦任务归集结果addAll,后⼀个⼦任务的结果直接全部添加到前⼀个⼦任务结果中
CH_ID 是⼀个unmodifiableSet集合
- Collectors.toCollection() :⽤⾃定义的实现Collection的数据结构收集
Collectors.toCollection(LinkedList::new)
Collectors.toCollection(CopyOnWriteArrayList::new)
Collectors.toCollection(TreeSet::new)
public class Main {
public static void main(String[] args) throws Exception {
// 新建集合
List<String> list = Arrays.asList("sdfsdf","xxxx","bbb","bbb");
// 转为ArrayList
List<String> results = list.stream().collect(Collectors.toList());
// 转为set
list.stream().collect(Collectors.toSet());
// 转为LinkedList
List<String> result = list.stream().collect(Collectors.toCollection(LinkedList::new));
// 转为CopyOnWriteArrayList
List<String> result1 = list.stream().collect(Collectors.toCollection(CopyOnWriteArrayList::new));
Set<String> stringSet = list.stream().collect(Collectors.toCollection(TreeSet::new));
System.out.println(result);
System.out.println(stringSet);
}
}
//3种重载⽅法
Collectors.joining()
Collectors.joining("param")
Collectors.joining("param1", "param2", "param3")
public class Main {
public static void main(String[] args) throws Exception {
// 直接拼接
List<String> list = Arrays.asList("springboot教程","springcloud教程","java教程","架构教程");
String result1 = list.stream().collect(Collectors.joining());
System.out.println(result1);
// 使用自定义的分隔符
String result2 = list.stream().collect(Collectors.joining("||"));
System.out.println(result2);
// 使用前后缀
String result3 = list.stream().collect(Collectors.joining("||","[","]"));
System.out.println(result3);
// 使用前后缀
String result = Stream.of("springboot","mysql","html5","css3").collect(Collectors.joining(",","[","]"));
System.out.println(result);
}
}