Java 8 终端操作-collect
2019-11-05 本文已影响0人
xuanjiuye
操作符 | 功能 |
---|---|
toCollection | 将流中的元素全部放置到一个集合 |
toList | 转换成list |
toSet | 转换成set |
joining | 按一定规则拼接字符串 |
mapping | 映射 |
collectingAndThen | 先搜集后处理 |
reducing | 规约 |
groupingBy | 元素分组 |
toMap | 元素转map |
- toCollection
// 把元素按集合类型收集起来,这里是LinkedList
LinkedList<Integer> linkedList = Stream.of(1, 2, 3, 4, 5, 6).collect(Collectors.toCollection(LinkedList::new));
- toList
// 把元素收集成List,这里是默认为ArrayList
List<Integer> linkedList = Stream.of(1, 2, 3, 4, 5, 6).collect(Collectors.toList());
- toSet
// 把元素收集成set,这里是默认为HashSet
Set<Integer> integerSet = Stream.of(1, 2, 3, 4, 5, 6).collect(Collectors.toSet());
- joining
// 将流中的元素按照指定连接符,前后缀 连接起来。
System.out.println(Stream.of("java","android","python").collect(Collectors.joining(",","(",")")));
//(java,android,python)
- mapping
// 先对流中的每个元素进行映射,即类型转换,然后再将新元素以给定的Collector进行归纳。
System.out.println(Stream.of("java","android","python").collect(Collectors.mapping(s->"["+s+"]",Collectors.joining("::"))));
//[java]::[android]::[python]
- collectingAndThen
// 把流中的元素收集成集合,然后用逗号(,)拼接
String collectingAndThen = Stream.of(1, 2, 3, 4, 5, 6).collect(Collectors.collectingAndThen(Collectors.toList(), list -> Joiner.on(",").join(list)));
System.out.println(collectingAndThen);
//1,2,3,4,5,6
- reducing
// 对流中的元素规约统计,i是流中的元素,sum是每次规约后的结果
Integer reducing = Stream.of(1, 2).collect(Collectors.reducing(0, i -> i * i, (sum, i) -> sum + i));
System.out.println(reducing);
//1*1 + 2*2 = 5
- groupingBy
/ // 对流中的元素分组,奇数一组,偶数一组
//groupingBy 第一个参数表示分组的key值
//第二个参数是最终生成对象的类型
//第三个参数表示每个key对应值的类型
HashMap<Integer, List<Integer>> groupingBy = Stream.of(1, 2, 3, 4, 5, 6).collect(Collectors.groupingBy(i -> i % 2, HashMap::new, Collectors.toList()));
groupingBy.entrySet().forEach(entry->{
System.out.println(entry.getKey()+":"+entry.getValue());
});
// 0:[2, 4, 6]
// 1:[1, 3, 5]
- toMap
//toMap 第一个参数表示map的key值
//第二个参数是value处理函数
//第三个参数表示key值冲突的时候,对值的取舍
Map<Integer, Integer> toMap = Stream.of(1, 2, 3, 4, 5, 6).collect(Collectors.toMap(i -> i % 2, v -> v, (v1, v2) -> v1));
toMap.entrySet().forEach(entry->{
System.out.println(entry.getKey()+":"+entry.getValue());
});
// 0:2
// 1:1