流是Java API的新成员,它容许你以声明性方式处理数据集合(经过查询语句来表达,而不是临时编写一个实现)。就如今来讲,你能够把它们当作遍历数据集的高级迭代器。此外,流还能够透明地并行处理,你无需写任何多线程代码了!多线程
类别 | 方法名 | 方法签名 | 做用 |
---|---|---|---|
筛选切片 | filter | Stream<T> filter(Predicate<? super T> predicate) | 过滤操做,根据Predicate判断结果保留为真的数据,返回结果仍然是流 |
distinct | Stream<T> distinct() | 去重操做,筛选出不重复的结果,返回结果仍然是流 | |
limit | Stream<T> limit(long maxSize) | 截取限制操做,只取前 maxSize条数据,返回结果仍然是流 | |
skip | Stream<T> skip(long n) | 跳过操做,跳过n条数据,取后面的数据,返回结果仍然是流 | |
映射 | map | <R> Stream<R> map(Function<? super T, ? extends R> mapper) | 转化操做,根据参数T,转化成R类型,返回结果仍然是流 |
flatMap | <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) | 转化操做,根据参数T,转化成R类型流,这里会生成多个R类型流,返回结果仍然是流 | |
匹配 | anyMatch | boolean anyMatch(Predicate<? super T> predicate) | 判断是否有一条匹配,根据Predicate判断结果中是否有一条匹配成功 |
allMatch | boolean allMatch(Predicate<? super T> predicate) | 判断是否全都匹配,根据Predicate判断结果中是否所有匹配成功 | |
noneMatch | boolean noneMatch(Predicate<? super T> predicate) | 判断是否一条都不匹配,根据Predicate判断结果中是否全部的都不匹配 | |
查找 | findAny | Optional<T> findAny() | 查找操做, 查询当前流中的任意元素并返回Optional |
findFirst | Optional<T> findFirst() | 查找操做, 查询当前流中的第一个元素并返回Optional | |
归约 | reduce | T reduce(T identity, BinaryOperator<T> accumulator); | 归约操做,一样两个类型的数据进行操做后返回相同类型的结果。好比两个整数相加、相乘等。 |
max | Optional<T> max(Comparator<? super T> comparator) | 求最大值,根据Comparator计算的比较结果获得最大值 | |
min | Optional<T> min(Comparator<? super T> comparator) | 求最小值,根据Comparator计算的比较结果获得最小值 | |
汇总统计 | collect | <R, A> R collect(Collector<? super T, A, R> collector) | 汇总操做,汇总对应的处理结果。这里常常与 |
count | long count() | 统计流中数据数量 | |
遍历 | foreach | void forEach(Consumer<? super T> action) | 遍历操做,遍历执行Consumer 对应的操做 |
上面是Stream API的一些经常使用操做,按场景结合lambda表达式调用对应方法便可。至于Stream的生成方式,Stream的of方法或者Collection接口实现类的stream方法均可以得到对应的流对象,再进一步根据须要作对应处理。app
另外上述方法若是返回是Stream对象时是能够链式调用的,这个时候这个操做只是声明或者配方,不产生新的集合,这种类型的方法是惰性求值方法;有些方法返回结果非Stream类型,则是及早求值方法。ide