Stream流

打印 上一主题 下一主题

主题 1044|帖子 1044|积分 3132

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、什么叫流

tips:聪明的人只看红字,其他的是我用来解释Stream流的含义


  • Stream不是集合框架,也不是数据结构,他不存储数据,就好比一个工厂,从源头接收原材料,进行加工,然后产出最终产品,在这个过程中,工厂不会存储任何东西。同样的Stream流只会对流数据进行处理并不会保存。流不存储元素。它只是通过计算操作管道(或者从计算机的消息队列中)从数据结构、数组或 I/O 通道等源传输元素。
  • 工厂只会对源头接收原材料,并不会把源头的材料给改了,就好比一个生产手机的,源头公司是生产芯片的,他不会把源头公司的芯片变成了主板。同样的Stream流只会接收数据进行处理,并不会改变源数据。流本质上是功能性的
  • 工厂并不是不间断生产,当原材料不足就会被迫停止生产。同样的Stream流并不会主动去寻找数据,如果没有数据流他就停在那里等待,我们叫他惰性,仅在需要时对流进行计算。流是惰性的
  • 当原材料进入工厂,至于怎么加工源头就管不着的,工厂可以按照自己方式进行生产,比如多建立几条流水线,会提高工厂生产效率。同样的Stream流也支持并行处理,如果需要的话,Stream流可以充分利用计算机资源并行处理这段数据。流具有并行处理的能力
  • 当一个原材料被加工成最终产品时,它将无法恢复到原状,即使在强大的工厂也无能为力。同样的Stream流只是一次性的,就像迭代器一样,当对流的处理结束,他将不能再执行一遍。在流的生命周期中,流的元素仅访问一次。
二、流的目的

用于简化集合和数组的操作。 三、流的使用
  1. List<String> list = new ArrayList<>();
  2. list.add("张三");
  3. list.add("张三丰");
  4. list.add("柳岩");
  5. list.add("林青霞");
  6. list.add("张曼玉");
  7. //普通写法
  8. //找出“张”开头的人物
  9. list.stream().filter(new Predicate<String>() {
  10.     @Override
  11.     public boolean test(String s) {
  12.         return s.startsWith("张");
  13.     }
  14. }).forEach(s -> System.out.println(s));
  15. //简化写法
  16. //找出“张”开头的人物,并且长度为3的人物
  17. list.stream().filter(s->s.startsWith("a")).filter(s->s.length()==3).forEach(System.out::println);
复制代码
1. 流的使用流程

数据源(source) -> 数据处理 / 转换(intermedia) -> 结果处理(terminal)2. Stream的核心思想:


  • 先得到集合或者数组的Stream流对象。
  • 把元素放进去
  • 然后用Stream流简化的API来操作元素
四、流的常用方法

1. 获取Stream流

如果是数组的话,可以使用 Arrays.stream() 或者 Stream.of() 创建流;如果是集合的话,可以直接使用 stream() 方法创建流,因为该方法已经添加到 Collection 接口中。

  • Collection接口中的方法
方法说明
default Stream stream()返回以此集合为源的顺序 Stream 。
 

  • 通过数组获取方式,使用Arrays工具类中提供的方法
方法说明
public static  Stream stream(T[] array)返回以指定数组作为源的顺序 Stream 。
public static  Stream stream(T[] array, int startInclusive, int endExclusive)返回以指定数组,指定索引范围作为源的顺序 Stream 。
static  Stream of​(T t)返回包含单个元素的Stream
static  Stream of​(T... values)返回其元素为指定值的顺序Stream。
  2. 操作流

[table][tr][td]方法[/td][td]说明[/td][/tr][tr][td]Stream filter(Predicate
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表