个人随笔
目录
Java的Stream操作举例
2024-07-17 21:21:34

一、概述
Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理。

特点

  1. 不是数据结构,不会保存数据。
  2. 不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。(保留意见:毕竟peek方法可以修改流中元素)
  3. 惰性求值,流在中间处理过程中,只是对操作进行了记录,并不会立即执行,需要等到执行终止操作的时候才会进行实际的计算。

二、分类

  1. 无状态:指元素的处理不受之前元素的影响;
  2. 有状态:指该操作只有拿到所有元素之后才能继续下去。
  3. 非短路操作:指必须处理所有元素才能得到最终结果;
  4. 短路操作:指遇到某些符合条件的元素就可以得到最终结果,如 A || B,只要A为true,则无需判断B的结果。

三、举例

  1. public class StreamTest {
  2. public static void main(String[] args) {
  3. String[] arr = {"hello","","b_a_c","test"};
  4. //我们要通过流操作打印字符串abc
  5. //1、先转换成流
  6. Arrays.stream(arr)
  7. //2、过滤掉空格,参数是函数接口Predicate(输入一个数,返回boolean值)
  8. //只有返回的true,才会继续放到流中
  9. .filter(i->!i.isEmpty())
  10. //3、进行排序
  11. .sorted()
  12. //4、获取第一个
  13. .limit(1)
  14. //5、再用map操作将下划线去掉,参数是Function(输入一个数,返回一个数),map操作会把返回的数放入流中
  15. .map(i->i.replaceAll("_",""))
  16. //6、到这里其实已经得到了字符bac,那怎样得到abc呢,我们先转成一个新的流
  17. //参数也是Function,不过这个是输入一个数,返回一个流
  18. .flatMap(i->Arrays.stream(i.split("")))
  19. //7、再对流进行排序
  20. .sorted()
  21. //这个是终止操作,一个流必须有一个终止操作,可以有0~n个中间操作,上面的就是中间操作。
  22. //参数是Consumer(只有输入,没有输出):当然也可以写成:.forEach(System.out::println);
  23. .forEach(i->System.out.print(i));
  24. }
  25. }

参考:https://www.cnblogs.com/owenma/p/12207330.html

 17

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2