JAVA8新特性之 Stream API
Posted owenl-y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA8新特性之 Stream API相关的知识,希望对你有一定的参考价值。
重要的 Stream API : java.util.Stream.*
Stream提供了一种高效且简易处理数据的方式
注意:1.Stream自己不会存储元素
2.对Stream进行操作不会改变数据源,相反,会产生一个执有结果的新Stream
3.Stream操作是延迟执行的。只有进行了终止操作才会产生结果
(并行流就是把内容分成多个数据块,并用不同的线程分别处理每个数据块。在Java8 后,Stream API可以声明性的通过parallel()与sequential()在并行流与串行流(顺序流)之间进行切换
一、Stream操作的三个步骤:1.创建Stream 通过一个数据源(集合或数组)获取一个流。(有五种方法)
2.中间操作 一个中间操作链,对数据进行处理
3.终止操作(终端操作) 一个终止操作,执行中间操作连,并产生结果
(中间操作不会执行任何处理,而在终止操作时一次性全部处理,称为“惰性操作”)
二、创建Stream:
1、用Collection提供的成员方法: Stream<T> stream 返回一个的是串行流
Stream<T> parallelStream 返回一个并行流
2、用Arrays的静态方法: Arrays.stream()
3、使用静态方法: Stream.of()
4、使用静态方法创建无限流: Stream.iterate() 或 Stream.generate()
三、中间操作
1、筛选与切片 fileter (Predicate p) 接受Lambda,从流中过滤某些元素
distinct() 通过流所生成元素的hashCode()和equals()去除重复元素
limit(long maxSize) 截断流,使其元素不超过给定数量
skip(long n) 返回一个扔掉了前n个元素的流。若流中元素不足n个,则返回一个空流。与limit(n)互补。
2、映射 map(Function f) 接收一个函数作为参数,该函数会被应用到每个元素,并映射成新的元素
mapToDouble(ToDoubleFunction f) 接收一个函数作为参数,该函数会被应用到每个元素,并产生一个新的DoubleStream
mapToInt(ToIntFunction f) 接收一个函数作为参数,该函数会被应用到每个元素,并产生一个新的Integer
3、排序 sort() 按自然顺序排序(字典顺序),产生一个新流
sorted(Comparator c) 按照比较器排序,产生一个新流
四、终止操作: 会从流的流水线中产生结果,其结果可以任何不是流的值
1、查找与匹配 allMatch(Predicate p) 检查是否匹配所有元素
anyMatch(Predicate p) 检查是否至少匹配一个元素
noneMatch(Predicate p) 检查是否没有匹配的元素
findFirst()返回第一个元素
findAny() 返回任意当前流中的元素
count() 返回流中数据的元素个数
max(Comparator c)返回流中最大的值
min(Comparator c)返回流中最小的值
forEach(Consumer c) 内部迭代(使用Collection接口需要用户去做迭代,称为外部迭代。相反,Stream API 使用内部迭代----它帮你把迭代做了)
2、归纳 reduce(T iden , BinaryOperator b) 可以将流中元素反复结合起来,得到一个值,返回T
reduce(BianaryOperator b)可以将流中元素反复结合起来,得到一个值。返回
Optional<T>
(备注:map和reduce的连接通常称为map-reduce模式,因Google用它来进行网络搜索而出名)
3、收集
collect(Collector c) 将流转化为其他形式,接受一个Collector接口的实现,用于给Stream中的元素做汇总
( Collector 接口中方法的实现决定了如何对流执行收集操作(如收
集到 List、Set、Map)。但是 Collectors 实用类提供了很多静态
方法,可以方便地创建常见收集器实例 。 )
以上是关于JAVA8新特性之 Stream API的主要内容,如果未能解决你的问题,请参考以下文章