Java 8 终端操作-collect

2019-11-05  本文已影响0人  xuanjiuye
操作符 功能
toCollection 将流中的元素全部放置到一个集合
toList 转换成list
toSet 转换成set
joining 按一定规则拼接字符串
mapping 映射
collectingAndThen 先搜集后处理
reducing 规约
groupingBy 元素分组
toMap 元素转map
  1. toCollection
 // 把元素按集合类型收集起来,这里是LinkedList
LinkedList<Integer> linkedList = Stream.of(1, 2, 3, 4, 5, 6).collect(Collectors.toCollection(LinkedList::new));
  1. toList
// 把元素收集成List,这里是默认为ArrayList
List<Integer> linkedList = Stream.of(1, 2, 3, 4, 5, 6).collect(Collectors.toList());
  1. toSet
 // 把元素收集成set,这里是默认为HashSet
Set<Integer> integerSet = Stream.of(1, 2, 3, 4, 5, 6).collect(Collectors.toSet());
  1. joining
 // 将流中的元素按照指定连接符,前后缀 连接起来。
System.out.println(Stream.of("java","android","python").collect(Collectors.joining(",","(",")")));
//(java,android,python)
  1. mapping
 // 先对流中的每个元素进行映射,即类型转换,然后再将新元素以给定的Collector进行归纳。
System.out.println(Stream.of("java","android","python").collect(Collectors.mapping(s->"["+s+"]",Collectors.joining("::"))));
//[java]::[android]::[python]
  1. 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
  1. 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
  1. 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]
  1. 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
上一篇下一篇

猜你喜欢

热点阅读