摘要:中提出一个集合流的抽象工具,简称,用于集合内元素的计算,更确切的说是过滤和统计操作。返回由新元素组成的。返回基本类型对应的。主要用来查看流中元素的数据状态。聚合操作,最小值,最大值,总数量。短路操作,有一个符合条件返回。
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的延迟特性。
中间操作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.)
简单的说,就是一个或多个流合并成一个新流。
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操作提高了数据处理效率、开发效率。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/70791.html
摘要:用于对流进行排序。三最终操作用于迭代流中的每个元素,并执行相应的操作。类类也是的新特性,用于有效解决问题。与的功能一样,不过接受一个函数式接口来生成对象为空则抛出异常与使用类似与使用类似这是一种级联的方式,能够解决方式的嵌套问题。 Stream API Stream API是Java8的新特性,通常用于对集合进行一些操作,可以帮助开发者写出更高效、整洁的代码。 一、Stream流的创建...
摘要:使用我们来看下面这段代码,里面有一个属性代表菜品的卡路里值,现在的需求是按卡路里对菜品进行排序再返回菜名,并且要求卡路里的值大于。 前言: 在实际开发中经常需要获取各种各样不同格式的数据,因为数据库的表结构是一开始就设计好的所以很多时候我们不得不先从数据库里或其他地方获得数据后再根据需求去一层一层的筛选数据,在Java 8之前的做法不外乎就是各种List、Set一起上,各种循环判断。如...
摘要:获取每个元素的字符串长度放入新流中,然后转为类型。归约归约就是把整个流归约成一个值的操作,比如求集合中最大的元素所有元素值的和之类的操作。 前言: 上一篇文章 Java 8之stream介绍和使用 中讲解了stream的定义和用法,简单介绍几个最基本最常用的方法,其实stream还有更强大的功能,这篇文章就会给大家介绍stream的进阶用法。 筛选: 在上一篇文章中我们介绍了使用fi...
摘要:接口有一个方法,可以返回值。在上面的代码中,就是获取字符串的长度,然后将每个字符串的长度作为返回值返回。 今天我们还讲讲Consumer、Supplier、Predicate、Function这几个接口的用法,在 Java8 的用法当中,这几个接口虽然没有明目张胆的使用,但是,却是润物细无声的。为什么这么说呢? 这几个接口都在 java.util.function 包下的,分别是Con...
阅读 930·2021-11-17 09:33
阅读 397·2019-08-30 11:16
阅读 2452·2019-08-29 16:05
阅读 3319·2019-08-29 15:28
阅读 1372·2019-08-29 11:29
阅读 1924·2019-08-26 13:51
阅读 3364·2019-08-26 11:55
阅读 1183·2019-08-26 11:31