javaSE笔记 Stream流 生成方式 + 中间操作 + 终结操作 + 收集操作

体验Stream流

eg:使用Stream流的方式完成过滤操作 :

list.stream().filter(s -> s.startWith("张")).filter(s -> s.length() ==3).forEach(System.out::println);

Stream流的生成方式

Stream流的使用:
生成流:通过数据源(集合,数组)生成流,list.stream()
中间操作:一个流后面可以跟随零个或多个中间操作,其目的只要是打开流,做出某种程度的数据过滤/映射,然后返回一个新的流,交给下一个操作使用,比如filter()
终结操作:一个流只能有一个终结操作,当这个操作执行后,流就被使用"光"了,无法再被操作,所以这必定是流的最后一个操作,forEach()

javaSE笔记 Stream流 生成方式 + 中间操作 + 终结操作 + 收集操作
eg:
javaSE笔记 Stream流 生成方式 + 中间操作 + 终结操作 + 收集操作

Stream流的中间操作之filter

Stream filter(Predict predict):用于对流中的数据进行过滤 Predict接口中的方法 boolean test(T t):对给定的参数进行判断,返回一个布尔值 所以在使用filter方法的时候,要给Predict接口提供一个对象,可以用Lambda方法实现.

Stream流的常见中间操作方法

Stream limit(long maxSize):返回此流中的元素组成的流,截取前指定参数个数的数据
Stream skip(long n):跳过指定参数个数的数据,返回由该流的剩余元素组成的流

eg:
javaSE笔记 Stream流 生成方式 + 中间操作 + 终结操作 + 收集操作

Stream Stream concat(Stream a, Stream b):合并 a 和 b 两个流为一个流 Stream distinct(): 返回由该流的不同元素 (根据Object.equals(Object))组成的流

javaSE笔记 Stream流 生成方式 + 中间操作 + 终结操作 + 收集操作

Stream sorted(): 返回由此流的元素组成的流,根据自然顺序排序
Stream sorted(Comparator comparator):返回由该流的元素组成的流,根据提供的Comparator进行排序

javaSE笔记 Stream流 生成方式 + 中间操作 + 终结操作 + 收集操作

Stream map(Function mapper): 返回由给定函数应用于此流的元素的结果组成的流
Function接口中的方法 R apply(T t)
IntStream mapToInt(ToIntFunction mapper):返回一个IntStream其中包含将给定函数应用于此流的元素的结果。

javaSE笔记 Stream流 生成方式 + 中间操作 + 终结操作 + 收集操作

Stream流中的常见终结操作方法

void forEach(Consumer action):对此流的每个元素执行操作
Consumer接口中的方法 void accept(T t):对给定的参数执行此操作
long count():返回此流中的元素数

P393有一个Stream流的综合操作,可以试着写一下,重点是理解前面四种函数式接口的逻辑关系。
感觉这四个接口就能完全实现代码的所有功能一样,Supplier,Consumer,Predict,Function,分别是生成式接口,消费型接口,逻辑判断接口,顺序执行接口,最后两个瞎写的,不过感觉就是代表着输入,输出,if,各种中间操作,用好了能实现很多功能吧。

Stream流的收集操作

对数据使用Stream流的方式操作完毕后,想把流中的数据收集到集合中,可以用Stream流的收集方法
R collect(Collector collector) , 但这个收集方法的参数是一个Collector接口
不过,工具类 Collectors提供了具体的收集方式
public static Collector toList(): 把元素收集到List集合中
public static Collector toSet(): 把元素收集到Set集合中
public static Collector toMap(Function keyMapper, Function valueMapper):把元素收集到Map集合中,具体的例子看P394
javaSE笔记 Stream流 生成方式 + 中间操作 + 终结操作 + 收集操作

上一篇:【译】第十二篇 Integration Services:高级日志记录


下一篇:(javase)使用递归与不使用递归计算N的阶乘