java inputstream api_java8 Stream API笔记

生成Stream Source的方式

从Collection和数组生成

* Collection.stream()

* Collection.parallelStream()

* Arrays.stream(T array) or Stream.of()

从BufferedReader

* java.io.BufferedReader.lines();

静态工厂

* java.util.stream.IntStream.range();

* java.nio.file.Files.walk();

使用Spliterator

* java.util.Spliterator

其他

* Random.ints();

* BitSet.stream();

* Pattern.splitAsStream(java.lang.CharSequence);

* JarFile.stream();

流的操作

* Intermediate:一个流后面跟随零个或多个intermediate操作。其目的主要是打开流,做出某种程度的数据映射/过滤,然后返回一个新的流,

交给下一个操作使用。这类操作都是以惰性(lazy)化的,就是说,就是

说,仅仅调用到这类方法,并没有真正开始流的遍历。多个intermediate操作会在Terminal操作的时候融合起来,一次循环完成。Stream你有个操作函数的集合,每次转换操作就把转换函数放入这个集合中,在Terminal操作的时候循环Stream对应的集合,然后对每个元素执行所有的函数

* Terminal:一个流只能有一个terminal操作,当这个操作执行后,流就无法再操作了。也就是说Terminal操作是流的最后一个操作。Terminal操作的执行,才会真正开始流的遍历,并且会生成一个结果,或者一个side effect

* short-circuiting。用以指:

对于一个 intermediate 操作,如果它接受的是一个无限大(infinite/unbounded)的 Stream,但返回一个有限的新 Stream。

对于一个 terminal 操作,如果它接受的是一个无限大的 Stream,但能在有限的时间计算出结果。

当操作一个无限大的 Stream,而又希望在有限时间内完成操作,则在管道内拥有一个 short-circuiting 操作是必要非充分条件。

一个流操作的实例:

int sum = widgets.stream()//获取source

.filter(w->w.getColor() == RED)//filter 进行数据筛选

.mapToint(w->w.getWeight())//mapToint进行数据转换

.sum();

stream()获取当前小物件的source,filter和mapToInt为intermediate操作,进行数据筛选和转换,最后一个sum操作为terminal操作,对符合条件的小物件作重量求和

流的操作

Intermediate:

map(mapToint、flatMap)、filter、distinct、sort、peek、limit、skip、parallel、sequential、unordered

Terminal

forEach 、forEachOrder、toArray、reduce、collect、min、max、count、anyMatch、allMatch、noneMatch、findFirst、findAny、iterator

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值