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)foreach用法:
3)stream流:Java 8 中的stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation),生成流的两种方式:stream()− 为集合创建串行流。parallelStream() − 为集合创建并行流。
4)map用法:接受一个函数作为参数,并将函数应用到每一个元素上,返回新的元素list.
5)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);
6)match相关的方法:
allMatch(Predicate p):检查是否匹配所有元素
如:Boolean isMatch = array.stream().allMatch(t -> t.getAge() > 23),是否有年龄大于23的元素,返回的是布尔类型。
7)reduce相关方法:将元素中的值以某种方式连接起来
例如:Optional result = array.stream().map(e -> e.getAge()).reduce((x, y) -> x + "," + y); 输出:24,25
8)collect(Collector c):将流转换为其他形式。接收一个Collector接口的实现,用于给Stream中元素做汇总的方法
例如:
1、集合排序:ArrayList list = new ArrayList<>(); list.sort((o1,o2)->o2.age - o1.age) 实现按年龄倒序排序 Collections.sort(list) 默认升序 Collections.sort(list,(o1,o2)->o2.age - o1.age) TreeSet set = new TreeSet(); 若直接输出set,则会报错,因为TreeSet是默认实现了Comparator接口的,但是该set中的比较不知道按Person中的哪个字段进行排序,所以会报错。 可以这样写:TreeSet set = new TreeSet<>((o1,o2)->o2.age - o1.age),指定排序方法.
2、集合遍历:ArrayList list = new ArrayList<>(); list.forEach(each->{ if(each%2=1)System.out.print(each); })
3、删除集合中满足条件的元素:ArrayList list = new ArrayList<>(); list.removeIf(each -> each.age > 15); 把大于15的person对象删除
4、线程实现:Thread thread = new Thread(()-> {
for(int i=0; i< 10; i++){
System.out.println(i);
}
});
thread.start(); 实现了Runnable接口中的run()方法
注:摘自:https://www.cnblogs.com/maikucha/p/8435906.html