暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

stream流的常用操作

323
  • reduce()操作

    • 定义:前一个操作的结果会传递给下一个操作继续执行,即前一轮reduce操作的结果会作为参数传递给下一轮reduce的参数

    • 使用场景:对集合求和,求集合的最大值,求集合的最小值。

    public class Main {


    public static void main(String[] args) throws Exception {

    int sum = Stream.of(1, 2, 3, 4, 5).reduce((item1, item2) -> item1 + item2).get();
    System.out.println(sum);


    // int value = Stream.of(1, 2, 3, 4, 5).reduce(new BinaryOperator<Integer>() {
    // @Override
    // public Integer apply(Integer integer, Integer integer2) {
    // return integer+integer2;
    // }
    // }).get();
    //
    // System.out.println(value);




    // int value = Stream.of(1, 2, 3, 4, 5).reduce(100,(item1,item2)->item1+item2);
    // System.out.println(value);


    int value = Stream.of(1645, 234345, 32, 44434, 564534, 435, 34343542, 212)
    .reduce((item1, item2) -> item1 > item2 ? item1 : item2).get();
    System.out.println(value);




    }
    }
    • groupingBy操作

      • 定义:对一个流的划分不同的分组,并返回这个分组的key,类似于mysql中的分组概念。

      • 适用场景:对于一个流进行多分类时使用,返回的是分类的key

      public class Main {


      public static void main(String[] args) throws Exception {
      List<Student> students = Arrays.asList(new Student("广东", 23), new Student("广东", 24),
      new Student("广东", 23),
      new Student("北京", 22), new Student("北京", 20),
      new Student("北京", 20), new Student("海南", 25));
      //根据省份进行划分,注意怎么看返回类型!!!!
      Map<String,List<Student>> listMap = students.stream().collect(Collectors.groupingBy(obj->obj.getProvince()));
      listMap.forEach((key,value)->{
      System.out.println("=======");
      System.out.println(key);
      value.forEach(obj->{
      System.out.println(obj.getAge());
      });


      });


      }
      }




      class Student {
      private int age;


      private String province;


      public Student(String province, int age) {
      this.province = province;
      this.age = age;
      }


      public Student() {
      }


      public int getAge() {
      return age;
      }


      public void setAge(int age) {
      this.age = age;
      }


      public String getProvince() {
      return province;
      }


      public void setProvince(String province) {
      this.province = province;
      }
      }
      • partitionBy操作

        • 定义:将一个流分为两个分组,注意只能partitionBy只能将一个流中的数据分为两个分组。

        • 适用场景:对一个流的操作需要分为两类,并且者两类之间有明显的界限

        /**
        * partitioningBy():将条件为true的分为一组集合,条件为false的分为一组集合
        * {false=[java, CSS3], true=[springboot, HTML5]}
        */
        public class Main {


        public static void main(String[] args) throws Exception {


        List<String> list = Arrays.asList("java", "springboot", "HTML5", "CSS3");

        Map<Boolean, List<String>> result = list.stream().collect(Collectors.partitioningBy(obj -> obj.length() > 4));


        System.out.println(result);


        }
        }


        • jion操作

          • 定义:将stream流中的元素用指定的连接符连接起来并返回一个字符串

          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);




          List<String> list1 = Arrays.asList("springboot","mysql","html5","css3");
          System.out.println(list1);
          //快速创建一个带分隔符带string
          String result = Stream.of("springboot","mysql","html5","css3").collect(Collectors.joining(",","[","]"));
          System.out.println(result);


          }
          }
          •  summarizing操作

            • 定义:一个方法把统计学上的功能都完成,包括求平均值,求最大值,求数量,求和等等

            • 分类:summarizingInt、 summarizingLong 、summarizingDouble

            public class Main {


            public static void main(String[] args) throws Exception {
            List<Student> students = Arrays.asList(new Student("广东", 23), new Student("广东", 24),
            new Student("广东", 23),
            new Student("北京", 22), new Student("北京", 20),
            new Student("北京", 20), new Student("海南", 25));


            IntSummaryStatistics summaryStatistics = students.stream().collect(Collectors.summarizingInt(Student::getAge));


            System.out.println("平均值"+summaryStatistics.getAverage());
            System.out.println("人数"+summaryStatistics.getCount());
            System.out.println("最大值"+summaryStatistics.getMax());
            System.out.println("最小值"+summaryStatistics.getMin());
            System.out.println("总和"+summaryStatistics.getSum());

            }
            }




            class Student {
            private int age;


            private String province;

            public Student(String province, int age) {
            this.province = province;
            this.age = age;
            }


            public Student() {
            }


            public int getAge() {
            return age;
            }


            public void setAge(int age) {
            this.age = age;
            }


            public String getProvince() {
            return province;
            }


            public void setProvince(String province) {
            this.province = province;
            }
            }
            • 流式操作的总结

              • 普通集合通过stream()转为流

              • 通过filter()/map()来将筛选/转换流上的每一个元素

              • 通过collect()来收集流

                • 比如收集统计信息/收集分类信息/仅仅只是收集为一个新的list或map或set

             

            文章转载自梁霖编程工具库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论