jdk新特性-lambda表达式
1、lambda表达式
Lambda表达式是java 8中最重要的新功能之一。
使用Lambda表达式可以替代只有一个抽象函数的接口实现,告别匿名内部类,代码更简洁易懂。
Lambda表达式同时还提升了对集合、框架的迭代、遍历、过滤数据的操作。
特点:
1、函数式编程
2、参数类型自动推断
3、代码量少、简洁
应用场景:
任何有函数式接口的地方
常用函数式接口:
Supplier 代表一个输出
Consumer 代表一个输入
BiConsumer 代表两个输入
Function 代表一个输入,一个输出(一般输入和输出是不同类型的)
UnaryOperator 代表一个输入、一个输出(输入和输出是相同类型的)
BiFunction 代表两个输入、一个输出(输入和输出是不同类型的)
BinaryOperator 代表两个输入、一个输出(输入和输出是相同类型的)
例1:
List<String> list = Arrays.asList("a","b","c");
for(String s : list){
System.out.println(s);
}
list.forEach(System.out::println); //相当于for循环遍历list
例2:
public class Test{
static String put(){
System.out.println("put.....");
return "put";
}
public static void main(String[] args){
System.out.println(put()); //普通调用
//lambda表达式Supplier
Supplier<String> s1 = ()->Test.put();
System.out.println(s1.get());
//lambda表达式简化写法
Supplier<String> s2 = Test::put;
System.out.println(s2.get());
//调用其他类中的方法
Supplier<String> s3 = Fun::haha();
System.out.println(s3.get());
}
}
class Fun{
public static String haha(){
return "haha";
}
}
2、方法的引用
方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法,方法引用提供了一种引用而不执行方法的方式 ,
如果抽象方法的实现恰好可以使用调用另外一个方法来实现,就有可能可以使用方法引用。
方法引用的分类
类型 语法 对应的lambda表达式
静态方法引用 类名::staticMethod (args) -> 类名.staticMethod(args)
实例方法引用 inst::instMethod (args) -> inst.instMethod(args)
对象方法引用 类名::instMethod (inst,args) -> 类名.instMethod(args)
构造方法引用 类名::new (args) -> new 类名(args)
静态方法引用:如果函数式接口的实现恰好可以通过调用一个静态方法来实现,那么就可以使用静态方法引用
实例方法引用:如果函数式接口的实现恰好可以通过调用一个实例的实例方法来实现,那么就可以使用实例方法引用
对象方法引用:抽象方法的第一个参数类型刚好是实例方法的类型,抽象方法剩余的参数恰好可以当做实例方法的参数。
如果函数式接口的实现能由上面说的实例方法调用来实现的话,那么就可以使用对象方法引用
构造方法引用:如果函数式接口的实现恰好可以通过调用一个类的构造方法来实现,那么就可以使用构造方法引用

浙公网安备 33010602011771号