Stream API

Stream是Java8中用于处理集合的API,利用函数式编程的思想方便的处理Java的集合类.

创建Stream

Java8在Collection接口中新添加了stream方法,意味着所有的集合类都可以通过调用stream方法来创建stream.

如果要对数组生成stream,可以通过静态的Stream.of()方法将它转换为一个Stream.

同样Stream.of()可以接受任意个参数,比如Stream.of("xiaoming","hehe");

Stream.empty()可以创建不含有任何元素的Stream

Stream.generate()方法可以创建无限Stream,比如Stream.generate(Math::random)创建随机数字无限Stream.Stream.generate()方法接受的是一个无参的函数,同样的Stream.iterate()方法有两个参数,第一个参数是一个seed,第二个参数是一个函数,通过无限的对种子使用该函数产生无限的Stream.

许多其它类也提供了可以创建Stream的方法,比如Patterm类有splitAsStream的方法,Files.lines也可以返回一个Stream.

流转换API

流转换指的是在一个流中读取数据,并将转换后的数据写入到另一个流中

stream.filter():过滤器转换,接受一个Predicate对象,可以直接传入lambda表达式

stream.map():对每一个元素应用一个函数

stream.limit(n)函数返回包括n个元素的新流

stream.skip(n)函数丢弃掉前面的n个元素

Stream.concat()函数将两个新流连接到一起

stream.distinct()函数返回具有与原来流具有相同顺序但是没有重复元素的新流

stream.sorted()函数接受一个Compator对象用于排序

聚合操作

聚合操作通过函数从流中获取数据,注意聚合操作都是终止操作,当一个流使用了终止操作后他就不能再使用其他的操作了.

stream.max() 返回最大值

stream.min() 返回最小值

stream.findFirst()返回第一个值,stream.findAny()返回任意值,stream.anyMatch()返回是否有匹配值

stream.reduce():接受一个二元函数,并且将这个二元函数从前两个元素开始重复利用到流的其他元素上,返回一个Optional.如果第一个参数传入一个基准值,那么返回值就永远不会为空,就不需要使用Optional,这时候返回值是实际的类型.

收集结果

stream.iterator()返回传统风格的迭代器

stream.toArray()返回数组,参数为数组的构造函数,比如stream.toArray(Integer[]::new)

stream.forEach()

stream.collect()

通过给collect()传递参数可以实现很多形式的结果收集.Collectors工具类提供了很多这样的参数.

下面默认静态导入了Collectors中的所有的方法.

stream.collect(toList())

stream.collect(toSet))

stream.collect(toCollection(TreeSet::new))

上面三个函数可以实现将流收集为list或set

stream.collect(joining()):将所有字符串拼接,给joining()传入参数可以添加分隔符

stream.collect(summarizingInt(fun)),fun是一个将流元素应设为数字的函数,通过collect的返回值可以得到结果的总和,最大值,最小值,平均值等,summarizingInt中的Int可以用Long|Double代替.

stream.collect(toMap(key,value,fun,con))将结果收集到Map中,key和value是两个函数参数,用于得到相应元素的键和值,第三个参数fun用于处理key相同情况,第四个参数传入相应Map的构造函数.

stream.collect(groupingBy(fun,toList())),根据fun对流进行分组,返回一个map,map的值类型可以通过第二个参数指定(toLIst,toSet).如果分类函数是一个predicate函数可以将groupingBy函数替换为partitioningBy

groupingBy的第二个参数

groupingBy的第二个参数可以传入其他一些收集器进行downstream处理:couning(),summing(),maxBy(),minBy().

mapping(fun,fun2)方法将一个函数应用到downstream结果上,其中的fun2()为另一种downstream方法,

summarizingInt()方法

reducing()方法对每个组中的元素进行reduce操作

joing()

你可能感兴趣的:(Stream API)