
1、首先利用foreach()方法对Stream元素进行遍历,如下图所示。
2、利用filter()方法对Stream元素进行过滤,其中x ->x >5为Lambda表达式,作为filter的参数。执行过滤后满足过滤条件的Stream元素将会保留。
3、利用map()方法对Stream元素进行一对一映射转换,如下图所示。
4、此外Stream对象还有很多其他非常有用的方法,可以自己尝试,如下图所示就完成了。
将两个Stream连接在一起,合成一个Stream。若两个输入的Stream都是排序的,则新Stream也是排序的;若输入的Stream中任何一个是并行的,则新的Stream也是并行的;若关闭新的Stream时,原两个输入的Stream都将执行关闭处理。
除掉原Stream中重复的元素,生成的新Stream中没有没有重复的元素。
对原Stream按照指定条件过滤,在新建的Stream中,只包含满足条件的元素,将不满足条件的元素过滤掉。
map方法将对于Stream中包含的元素使用给定的转换函数进行转换 *** 作,新生成的Stream只包含转换生成的元素。
为了提高处理效率,官方已封装好了,三种变形:mapToDouble,mapToInt,mapToLong。如果想将原Stream中的数据类型,转换为double,int或者是long是可以调用相对应的方法。
flatMap方法与map方法类似,都是将原Stream中的每一个元素通过转换函数转换,不同的是,该换转函数的对象是一个Stream,也不会再创建一个新的Stream,而是将原Stream的元素取代为转换的Stream。如果转换函数生产的Stream为null,应由空Stream取代。flatMap有三个对于原始类型的变种方法,分别是:flatMapToInt,flatMapToLong和flatMapToDouble。
peek方法生成一个包含原Stream的所有元素的新Stream,同时会提供一个消费函数(Consumer实例),新Stream每个元素被消费的时候都会执行给定的消费函数,并且消费函数优先执行
skip方法将过滤掉原Stream中的前N个元素,返回剩下的元素所组成的新Stream。如果原Stream的元素个数大于N,将返回原Stream的后(原Stream长度-N)个元素所组成的新Stream;如果原Stream的元素个数小于或等于N,将返回一个空Stream。
对原Stream进行排序,返回一个有序列的新Stream。sorterd有两种变体sorted(),sorted(Comparator),前者将默认使用Object.equals(Object)进行排序,而后者接受一个自定义排序规则函数(Comparator),可按照意愿排序。
在Stream接口提供了Collect的方法:
Collector是Stream的可变减少 *** 作接口(可变减少 *** 作如:集合转换计算元素相关的统计信息,例如sum,min,max或average等)
Collector<T, A, R>接受三个泛型参数,对可变减少 *** 作的数据类型作相应限制:
T:输入元素类型
A:可变处理函数
R:结果类型
Collector接口声明了4个函数,一起协作,将元素放入容器,经过转换输出想要结果:
对于前面提到了很多Stream的链式 *** 作,但是,我们总是要将Strea生成一个集合,比如:
如希望生成一个不是由Stream类库自动指定的一种类型(如TreeSet)。此时使用toCollection,它接受一个函数作为参数, 来创建集合。
toMap最少应接受两个参数,一个用来生成key,另外一个用来生成value。toMap方法有三种变形:
toMap(Function<? super T, ? extends K>keyMapper,Function<? super T, ? extends U>valueMapper)
使用collect可以将Stream转换成值。如maxBy和minBy允许用户按照某个特定的顺序生成一个值。
collect的一个常用 *** 作将Stream分解成两个集合。
数据分组是一种更自然的分割数据 *** 作, 与将数据分成true和false两部分不同,可以使用任意值对数据分组。
调用Stream的collect方法,传入一个收集器,groupingBy接受一个分类函数,用来对数据分组,就像partitioningBy一样,接受一个
Predicate对象将数据分成true和false两部分。我们使用的分类器是一个Function对象,和map *** 作用到的一样。
可以将Colletor 组合起来使用
求一段数字的和,如果是奇数,直接相加;如果是偶数,乘以2后在相加
forEachOrdered方法与forEach类似,都是遍历Stream中的所有元素,不同的是,如果该Stream预先设定了顺序,会按照预先设定的顺序执行(Stream是无序的),默认为元素插入的顺序。
Ref:
https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html
https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/
https://www.baeldung.com/java-8-collectors
https://blog.csdn.net/IO_Field/article/details/54971608
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)