eg:使用Stream流的方式完成过滤操作 :
list.stream().filter(s -> s.startWith("张")).filter(s -> s.length() ==3).forEach(System.out::println);
Stream流的使用:
生成流:通过数据源(集合,数组)生成流,list.stream()
中间操作:一个流后面可以跟随零个或多个中间操作,其目的只要是打开流,做出某种程度的数据过滤/映射,然后返回一个新的流,交给下一个操作使用,比如filter()
终结操作:一个流只能有一个终结操作,当这个操作执行后,流就被使用"光"了,无法再被操作,所以这必定是流的最后一个操作,forEach()
eg:
Stream
Stream
eg:
Stream
Stream
Function接口中的方法 R apply(T t)
IntStream mapToInt(ToIntFunction mapper):返回一个IntStream其中包含将给定函数应用于此流的元素的结果。
void forEach(Consumer action):对此流的每个元素执行操作
Consumer接口中的方法 void accept(T t):对给定的参数执行此操作
long count():返回此流中的元素数
P393有一个Stream流的综合操作,可以试着写一下,重点是理解前面四种函数式接口的逻辑关系。
感觉这四个接口就能完全实现代码的所有功能一样,Supplier,Consumer,Predict,Function,分别是生成式接口,消费型接口,逻辑判断接口,顺序执行接口,最后两个瞎写的,不过感觉就是代表着输入,输出,if,各种中间操作,用好了能实现很多功能吧。
对数据使用Stream流的方式操作完毕后,想把流中的数据收集到集合中,可以用Stream流的收集方法
R collect(Collector collector) , 但这个收集方法的参数是一个Collector接口
不过,工具类 Collectors提供了具体的收集方式
public static
public static
public static Collector toMap(Function keyMapper, Function valueMapper):把元素收集到Map集合中,具体的例子看P394