• java8 集合流式操作


    一. 基本概念
    1.1 什么是流
         不是集合,不是数据结构,不保存数据,它类似于 Iterator,对数据进行并行或者串行遍历,然后对数据进行一系列计算、过滤等操作,最终得到结果。
     
    1.2 为什么加入集合的流式操作
    • 更容易对集合进行一系列的操作:如过滤、转换、统计等
    • 可以并行的对集合进行操作,速度更快
    • 配合lambda使用可读性更强,代码更加简洁

    二. 集合操作分类:中间操作 和 最终操作

     2.1 中间操作( intermediate,可以连续多个 )
    filter(): 对元素进行过滤
    sorted():对元素排序
    map():元素映射
    distinct():去除重复的元素
      
            List<Integer> list = Arrays.asList(new Integer[]{1,2,3,5,7,8,10,10}) ;
        
    //      List<Integer> list2 = list.stream().filter((k)-> k%2==0).collect(Collectors.toList());
            //集合数据按照条件进行过滤,不符合条件的直接扔掉
            list.stream().filter((k)-> k%2==0).forEach(System.out::println );
            //对数据进行排序,也可以使用 lambda自定义函数排序
            list.stream().sorted().forEach(System.out::println );
                    //对所有数据进行统一的计算,得到一个新的集合
            list.stream().map(  k->k+10 ).forEach(System.out::println );
            //对集合中数据 去重
            list.stream().distinct(  ).forEach(System.out::println );
    2.2 最终操作( terminal ,只能有一个)
     
    • forEach():遍历每个元素。
    • reduce():把Stream 元素数据整合然后统计。例如,字符串拼接,数值的 sum,min,max ,average 都是特殊的 reduce。
    • collect():返回一个新的集合。
    • min():找到最小值。
    • max():找到最大值。
    三、函数操作实例
    3.1 构建stream对象
    // 1. Individual values
    Stream stream = Stream.of("a", "b", "c");
    // 2. Arrays
    String [] strArray = new String[] {"a", "b", "c"};
    stream = Stream.of(strArray);
    stream = Arrays.stream(strArray);
    // 3. Collections
    List<String> list = Arrays.asList(strArray);
    stream = list.stream();

     3.2 基础的操作实例

            List<Integer> list = Arrays.asList(new Integer[]{1,2,3,5,7,8,10,10}) ;
    //      List<Integer> list2 = list.stream().filter((k)-> k%2==0).collect(Collectors.toList());
            //对集合数据进行 加减乘,得到最后的结果
            Integer result = list.stream().reduce((a,b)->a+b  ).get();
            System.out.println( result );
            //返回集合set
            HashSet<Integer> set1 = list.stream().collect( Collectors.toCollection( ( )->{return new HashSet<>();  }) );
            System.out.println( set1 );
    
     
            //获取列表中的最大值
            Integer maxVal =  list.stream().max((x,y)->{
               return x>y?1:-1;
            }).get();
            System.out.println( maxVal );
    四、参考
     
     
     
  • 相关阅读:
    .net实现浏览器大文件分片上传
    asp.net实现浏览器大文件分片上传
    php实现浏览器大文件分片上传
    Java实现浏览器大文件分片上传
    文件分片上传
    大文件分片上传
    pdf缩略图生成上传解决方案
    专业精神的三个步骤
    安卓TabHost+ViewPager+RadioGroup多功能模板整理
    java基础之概谈xml文件解析
  • 原文地址:https://www.cnblogs.com/lean-blog/p/13897300.html
Copyright © 2020-2023  润新知