美文网首页
Java 8 终端操作-collect

Java 8 终端操作-collect

作者: xuanjiuye | 来源:发表于2019-11-05 17:00 被阅读0次
    操作符 功能
    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
    

    相关文章

      网友评论

          本文标题:Java 8 终端操作-collect

          本文链接:https://www.haomeiwen.com/subject/ddlebctx.html