流是使用集合中对象的一种方式。
流让一个人在最后说他们想要什么。这与命令式的方法形成了对比,命令式方法要求一个人说出如何在最后收集他们想要的东西。
流还支持微不足道的多线程。
基本流方法
有两种控制流交互的基本方法。 这些方法背后的总体思路是操纵对象的集合,以便仅剩下想要的对象。
如果我必须选择处理流的不可或缺的方法,我会说Map、Filter和Collect都在其中。
Filter
Filter接受一个谓词,只留下谓词为真的值。
Map
Map接受一个函数,并将流中的值从一种类型转换为另一种类型
sort
sort接受比较器,并根据比较器中指定的顺序对流中的值排序。
Collect
Collect停止流并将流中的值放入某种集合中,如列表。
toArray()
toArray()停止流并返回一个包含流中元素的数组。
发现者
在使用集合时,一个常见的任务是从流中获取元素。这些通常在筛选和映射之后使用,以确保找到的元素符合某些条件并且是首选类型。
findAny()
findAny()返回一个可选的流中包含一个元素(如果流为空,则不包含任何元素)。 这里不遵守顺序,特别是在并行流情况下。
findFirst()
findFirst()返回一个可选的包含流中的第一个元素(如果流为空,则不包含任何元素)。 使用此方法时,订单受到尊重
max(Comparator比较器)max
返回给定流的最大元素Comparator
min(Comparator比较器)min
返回给定流的最小元素Comparator
匹配器
另一个常见任务是确定对象是否满足某些给定条件。这些“匹配器”方法指示流中的某些,无对象或所有对象是否满足给定条件。
allMatch(Predicate pred)
返回true
流中的所有元素是否与Predicate
anyMatch(Predicate pred)
返回true
流中是否有任何元素与Predicate
noneMatch(Predicate pred)
返回true
流中是否没有元素匹配Predicate
流修饰符
有时,信息流并不是完全“正确”的信息流。这些方法创建的新流的特征与旧流的特征略有不同,无论是不同的长度,不同的起点还是保证仅包含唯一对象。
exclude()distinct()
创建一个新流,其中仅包含不同元素(基于.equals
)
limit(int maxSize)limit(maxSize)
通过将原始流截断为不超过maxSize的方式来创建新流。
skip(long n)
跳过流的前n个元素,并从其余元素中创建一个新流
sorted()
创建一个新的流,其中元素按照自然顺序排序
sorted(Comparator比较器)
创建一个新的流,其中的元素按照比较器排序
流表征器
使用集合时,另一个常见的任务是确定整个集合的某些特征。流api提供了一种方法来确定给定流的大小。
count()count()
计算流中元素的数量
如果您愿意,请访问我的编程博客以获取更多提示和技巧。