当前位置:   article > 正文

Java8新特性---StreamAPI_java8 stream api

java8 stream api

一、概念

1、基本概念

       Stream可以对集合数据进行操作,就类似使用SQL执行的数据查询。用于操作数据源(集合、数组等)所生成的元素序列。

        Stream和Collection集合区别:Collection是一种静态的内存数据结构,而Stream是有关计算,前者主要面向内存,存储在内存中,后者主要是面向CPU,通过CPU实现计算。

        注意:Stream自己不会存储元素;Stream不会改变原对象。相反,他们会返回一个持有结果的新stream;stream操作是延时执行的,他们会等到需要结果的时候才会执行。

2、操作步骤

         创建stream:一个数据源,获取一个流。

        中间操作:一个中间操作链,对数据源的数据进行处理

        终止操作:一旦执行终止操作,就执行中间操作链,并产生结果。

二、具体操作

1、创建

        1、集合创建

  1. List<String> list=new ArrayList<>();
  2. //顺序流
  3. list.stream();
  4. //并行流
  5. list.parallelStream();

        2、数组创建(利用工具类Arrays)

  1. int[] i={1,2,3};
  2. Arrays.stream(i);

        3、通过Stream.of方法

Stream<Integer> integerStream = Stream.of(1, 2, 3);

        4、通过无限流

  1. //迭代
  2. Stream.iterate(0,t->t+2).limit(5).forEach(System.out::println);
  3. //生成
  4. Stream.generate(Math::random).limit(5).forEach(System.out::println);

2、中间操作

        多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何处理,而在终止操作时一次性全部处理,称为“惰性求值”。

        1、筛选与切片

  1. List<Integer> list=new ArrayList<>();
  2. list.add(1);
  3. list.add(2);
  4. list.add(3);
  5. list.add(5);
  6. list.add(1);
  7. //过滤器 打印:3 5 1
  8. list.stream().filter(i->i>2).forEach(System.out::println);
  9. //去重 打印:1 2 3 5
  10. list.stream().distinct().forEach(System.out::println);
  11. //limit 打印:1 2
  12. list.stream().limit(2).forEach(System.out::println);
  13. //跳过元素 打印:3 5 1
  14. list.stream().skip(2).forEach(System.out::println);

        2、映射

         3、排序

 

  1. List<Integer> list=new ArrayList<>();
  2. list.add(1);
  3. list.add(2);
  4. list.add(3);
  5. list.add(5);
  6. list.add(1);
  7. //sorted 打印:1 1 2 3 5
  8. list.stream().sorted().forEach(System.out::println);
  9. //Sorted
  10. List<User> users=new ArrayList<>();
  11. users.add(new User(1,"11",20,1));
  12. users.add(new User(2,"222",22,0));
  13. users.add(new User(3,"33",23,1));
  14. users.add(new User(4,"44",20,0));
  15. users.stream().sorted((a,b)->{
  16. int i=Integer.compare(a.getAge(),b.getAge());
  17. if(i==0){
  18. return Integer.compare(a.getSex(),b.getSex());
  19. }else {
  20. return i;
  21. }
  22. }).forEach(System.out::println);

3、终止操作

        1、匹配与查找

 

  1. List<User> users=new ArrayList<>();
  2. users.add(new User(1,"11",20,1));
  3. users.add(new User(2,"222",22,0));
  4. users.add(new User(3,"33",23,1));
  5. users.add(new User(4,"44",20,0));
  6. //allMatch 打印:false
  7. boolean b = users.stream().allMatch(u -> u.getAge() > 20);
  8. System.out.println(b);
  9. //anyMatch 打印:true
  10. boolean c = users.stream().anyMatch(u -> u.getAge() > 20);
  11. System.out.println(c);
  12. //noneMatch 打印:false
  13. boolean d = users.stream().noneMatch(u -> u.getAge() > 20);
  14. System.out.println(d);
  15. //findFirst 打印:第一个元素
  16. System.out.println(users.stream().findFirst());
  17. //findAny 打印:随机元素(并行流会,串行流可能不会)
  18. System.out.println(users.parallelStream().findAny());
  19. //count 打印:元素总数
  20. System.out.println(users.stream().count());
  21. //最大
  22. System.out.println(users.stream().max((a,f)->Integer.compare(a.getAge(),f.getAge())));
  23. //最小
  24. System.out.println(users.stream().min((a,f)->Integer.compare(a.getAge(),f.getAge())));

        2、规约

  1. List<User> users=new ArrayList<>();
  2. users.add(new User(1,"11",20,1));
  3. users.add(new User(2,"222",22,0));
  4. users.add(new User(3,"33",23,1));
  5. users.add(new User(4,"44",20,0));
  6. //reduce
  7. List<Integer> nums= Arrays.asList(1, 2, 3, 4, 5);
  8. Integer reduce = nums.stream().reduce(0, Integer::sum);
  9. System.out.println(reduce);
  10. //计算user年龄
  11. Stream<Integer> integerStream = users.stream().map(user -> user.getAge());
  12. System.out.println(integerStream.reduce(Integer::sum));

     

           3、收集

  1. List<User> users=new ArrayList<>();
  2. users.add(new User(1,"11",20,1));
  3. users.add(new User(2,"222",22,0));
  4. users.add(new User(3,"33",23,1));
  5. users.add(new User(4,"44",20,0));
  6. //年龄大于20的转换为list
  7. List<User> collectList = users.stream().filter(u -> u.getAge() > 20).collect(Collectors.toList());
  8. //年龄大于20的转换为set
  9. Set<User> collectSet = users.stream().filter(u -> u.getAge() > 20).collect(Collectors.toSet());

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/611984
推荐阅读
相关标签
  

闽ICP备14008679号