Java Stream流
Stream流Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处置惩罚数据。
结合Lambda表达式来完成某种功能的实现
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 聚集运算和表达的高阶抽象。
Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
这种风格将要处置惩罚的元素聚集看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处置惩罚, 比如筛选, 排序,聚合等。
元素流在管道中颠末中间操纵(intermediate operation)的处置惩罚,最后由终极操纵(terminal operation)得到前面处置惩罚的效果。
+--------------------+ +------+ +------+ +---+ +-------+
| stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect|
+--------------------+ +------+ +------+ +---+ +-------+以上流程转化为Java代码为:
List<Integer> transactionsIds =
widgets.stream()
.filter(b -> b.getColor() == RED)
.sorted((x,y) -> x.getWeight() - y.getWeight())
.mapToInt(Widget::getWeight)
.sum();什么是Stream?
Stream(流)是一个来自数据源的元素队列并支持聚合操纵
[*]元素是特定范例的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需盘算。
[*]数据源 流的来源。 可以是聚集,数组,I/O channel, 产生器generator 等。
[*]聚合操纵 类似SQL语句一样的操纵, 比如filter, map, reduce, find, match, sorted等。
和从前的Collection操纵不同, Stream操纵还有两个基础的特征:
[*]Pipelining: 中间操纵都会返回流对象本身。 如很多个操纵可以串联成一个管道, 如同流式风格(fluent style)。 如许做可以对操纵进行优化, 比如延迟实验(laziness)和短路( short-circuiting)。
[*]内部迭代: 从前对聚集遍历都是通过Iterator或者For-Each的方式, 显式的在聚集外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。
生成流
在 Java 8 中, 聚集接口有两个方法来生成流:
[*]stream() − 为聚集创建串行流。(单线程)
[*]parallelStream()− 为聚集创建并行流。(多线程)
举个例子
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());https://gitee.com/cwy0710/image/raw/master/img/image-20240604221707954.png
方法
Stream()
生成流
forEach()
void forEach(Consumer
页:
[1]