1、什么是lambda,是java8新的特性,是一个匿名函数,可以非常简洁的实现接口。 lambda对接口的要求:接口里面的抽象方法只能够存在一个,或者被@FunctionalInterface修饰接口,或者接口中有一个抽象方法,其他的都是dafault或者静态方法。
2、Lambda定义的三个语法: (params) -> 单行语句; (params) ->表达式; (params) ->{多行语句}; lambda需要关注方法的参数列表和方法体,()描述参数列表;{}描述方法体;->lambda运算符,gos to 无参无返回:Interface inter1 = () -> {System.out.println(无参无返回")}
3、精简:lambda表达式中参数的类型可以省略,因为在接口中的方法已经定义了类型; 如果参数的数量只有一个,可以省略小括号;方法体中只有一条语句,此时大括号可以省略,如果该语句是返回语句,省略大括号的同时省略return。
例如 Interface inter1 = x -> System.out.println("无参无返回") Interface inter1 = x -> change(x)
4、普通方法引用 Interface inter1 = x-> Sysclass::change 构造方法引用 Interface inter1 = Sysclass::new(无参构造方法)返回Sysclass对象
5、常用的lambda表达式:
1) new Thread( () -> System.out.println("In")).start(); 实现了Runnable接口中的run()方法,该方法没有参数,大括号内的表达式就是该run方法的实现,如上面3所说,这个前提就是接口里面的抽象方法只能够存在一个。
2)stream流:Java 8 中的stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation),生成流的两种方式:stream()− 为集合创建串行流。parallelStream() − 为集合创建并行流。
3)map用法:接受一个函数作为参数,并将函数应用到每一个元素上,返回新的元素list.
获取list中每个元素的name属性组成一个新的list。
4)sorted()用法: sorted()产生一个新流,其中按自然顺序排序;sorted(Comparator comp)产生一个新流,其中按比较器顺序排 例如:Comparator comparator = (String o1, String o2) -> o1.compareTo(o2); 按升序排序
array.stream().map(testCode1 -> testCode1.getAge()).sorted(comparator).foreach(System.out::println);
5)match相关的方法:
allMatch(Predicate p):检查是否匹配所有元素
如:Boolean isMatch = array.stream().allMatch(t -> t.getAge() > 23),是否有年龄大于23的元素,返回的是布尔类型。
6)reduce相关方法:将元素中的值以某种方式连接起来
例如:Optional result = array.stream().map(e -> e.getAge()).reduce((x, y) -> x + "," + y); 输出:24,25
7)collect(Collector c):将流转换为其他形式。接收一个Collector接口的实现,用于给Stream中元素做汇总的方法
注:摘自:https://www.cnblogs.com/maikucha/p/8435906.html