which java用法,JAVA Stream用法

Stream(流)在JAVA已经不是一个新词了。很早之前我们就接触过JAVA中的输入输出流(IO Stream),它是对数据输入输出操作的抽象封装。JAVA8中提出一个集合流的抽象工具(java.util.stream,简称Stream),用于集合内元素的计算,更确切的说是过滤和统计操作。

Stream创建

Stream不是一种真实的数据源(不存在数据结构),所以我们没有办法直接来创建它,Stream只能依赖其他数据源来转换成我们的抽象操作。Stream本身是不存在,只是我们抽象出来的一个抽象操作,经过各种操作之后,Stream还需要转换成真实的数据源。

常见创建方式如下:

Collection

parallelStream()

stream()

Stream.of(...)

Arrays.stream(...)

Stream.generate(...)

Stream.iterate(seek, unaryOperator)

BufferedReader

lines()

其实最终都是依赖StreamSupport类来完成Stream创建的。

Stream操作

To perform a computation, stream operations are composed into a stream pipeline. A stream pipeline consists of a source (which might be an array, a collection, a generator function, an I/O channel, etc), zero or more intermediate operations (which transform a stream into another stream, such as filter(Predicate)), and a terminal operation (which produces a result or side-effect, such as count() or forEach(Consumer)). Streams are lazy; computation on the source data is only performed when the terminal operation is initiated, and source elements are consumed only as needed.

Stream操作由零个或多个中间操作(intermediate operation)和一个结束操作(terminal operation)两部分组成。只有执行结束操作时,Stream定义的中间操作才会依次执行,这就是Stream的延迟特性。

1460000012404470

中间操作

filter

Returns a stream consisting of the elements of this stream that match the given predicate.

返回一个符合条件的Stream。

map

Returns a stream consisting of the results of applying the given function to the elements of this stream.

返回由新元素组成的Stream。

mapToInt、mapToLong、mapToDouble

返回int、long、double基本类型对应的Stream。

flatMap

Returns a stream consisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element. Each mapped stream is closed after its contents have been placed into this stream. (If a mapped stream is null an empty stream is used, instead.)

简单的说,就是一个或多个流合并成一个新流。

1460000012404471

flatMapToInt、flatMapToLong、flatMapToDouble

返回对应的IntStream、LongStream、DoubleStream流。

distinct

返回去重的Stream。

sorted

返回一个排序的Stream。

peek

主要用来查看流中元素的数据状态。

limit

返回前n个元素数据组成的Stream。属于短路操作

skip

返回第n个元素后面数据组成的Stream。

结束操作

forEach

循环操作Stream中数据。

forEachOrdered

暗元素顺序执行循环操作。

toArray

返回流中元素对应的数组对象。

reduce

聚合操作,用来做统计。

collect

聚合操作,封装目标数据。

min、max、count

聚合操作,最小值,最大值,总数量。

anyMatch

短路操作,有一个符合条件返回true。

allMatch

所有数据都符合条件返回true。

noneMatch

所有数据都不符合条件返回true。

findFirst

短路操作,获取第一个元素。

findAny

短路操作,获取任一元素。

总结

Stream每个操作都是依赖Lambda表达式或方法引用。

Stream操作是一种声明式的数据处理方式。

Stream操作提高了数据处理效率、开发效率。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值