Java8中部分新特性详述(3)

在对一个Stream进行多次中间操作时,由于转换操作具有延迟特性(多个转换操作只会在终端操作的时候融合起来,然后一次循环完成)。我们可以简单的这样理解,在Stream中有个操作函数的集合,每次转换操作的时候都会把转换函数放到这个集合中,在终端操作的时候循环Stream对应的集合,然后对每个元素执行所有的函数。

此外,有些中间操作和终端操作具有短路的特性。

即指对于一个中间操作而言,如果它接收的是一个无限大的流,但返回的是有限的新流。(如limt)

对于一个终端操作,如果它接受的是一个无限大的流,但能在有限的时间内计算出结果(如findFirst、findAny等)

3.Stream的使用

Stream的使用涉及到三点:

Stream的构建、Stream的转换、Stream的归约

1)Stream的构建:

最常用的创建Stream有两种途径:

a)    通过Stream接口的静态工厂方法(注意:Java8里接口可以带静态方法);

b)    通过Collection接口的默认方法--stream(),把一个Collection对象转换成Stream

Stream接口的静态工程方法

of方法

generate方法

iterate方法

Collection接口的默认方法:

stream()

2)Stream的转换:

Stream中转换需要了解的就是刚才前面提到的Stream的中间操作。

3)Stream的归约:

Stream中的归约的最基本的方法即前面提到的Stream的终端操作。

这边需要重点强调的就是collect方法。它可以接受各种做法作为参数,将流中的元素累积成一个汇总结构。具体的做法是通过定义一个新的Collector接口来定义的。

Collector类中具有很多的工厂方法,如前面使用过的toList方法,或是toSet、toCollection、counting、summingInt等。

根据不同的工厂方法,可以实现不同的归约操作。此外你还可以实现自定义收集器。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/c2e1f2ed3c91e65ec0389d616180a264.html