Java提升二:Lambda表达式与方法引用

1、Lambda表达式

1.1、定义

lambda表达式是对于函数式接口(只含有一个抽象方法的接口)的简洁实现方式。它与匿名内部类的作用相似,但是就使用范围而言,匿名内部类更为广泛,而lambda表达式则更为简洁。

1.2、使用

lambda表达式的写法:

(需要实现的方法的参数)->{对于方法的具体实现}

代码展示:

先定义一个函数式接口,并定义方法使用函数式接口。

//函数式接口
interface Cook{
//无参数无返回值的抽象方法
public void cooking(String person);
}
//函数式接口作为方法的参数使用
public static void invokeCook(String person,Cook cook){
cook.cooking(person);
}

若使用匿名内部类进行实现:

//使用匿名内部类实现Cook接口中的方法重写
invokeCook("小明", new Cook() {
@Override
public void cooking(String person) {
System.out.println(person+"快做饭");
}
});

改用lambda表达式优化:

 //使用lambda表达式实现Cook接口中的方法重写
invokeCook("小明",(person)->{
System.out.println(person+"快做饭");
});
}

使用lambda表达式传参时,()中所传入的参数名可以不带类型标识符,但参数名必须于函数式接口中的方法的形参名保持一致。当lambda表达式要传递的参数为单参,且实现语句为单句时,可改写为如下形式:

 //使用lambda表达式实现Cook接口中的方法重写
invokeCook("小明",person->System.out.println(person+"快做饭");
);
}

1.3、总结

(1) lambda表达式针对于函数式接口使用,使用形式简便,使用范围较小。

(2) lambda表达式是匿名内部类的进一步提炼优化,称为匿名内部类的语法糖。

(3) lambda表达式()中传入的参数是要实现的函数式接口中的抽象方法的形参。

2、方法引用

2.1、定义

方法引用是用来直接访问类或者实例已经存在的方法(注意:不是创建或实现方法)或者构造方法。方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的目标类型上下文。运行时,方法引用会创建函数式接口的一个实例。

2.2、使用

方法引用的写法:类名::已存在的方法

代码展示

先定义一个函数式接口,并定义方法使用函数式接口。

//函数式接口
@FunctionalInterface
interface Printable{
//打印字符串的抽象方法
void printMethod(String s);
}
//定义一个方法,参数传入函数式接口,对字符串进行打印
public static void printString(Printable p){
p.printMethod("hellowrold");
}

若使用匿名内部类进行实现:

 //使用匿名内部类实现
printString(new Printable() {
@Override
public void printMethod(String s) {
System.out.println(s);
}
});

改用lambda表达式优化:

 //调用printString方法,因为参数是函数式接口,可以使用Lambda表达式
printString((s)->{
System.out.println(s);
});

用方法引用优化:

 //使用方法引用
//对象System.out已经存在,方法println也已经存在,
//可直接使用方法引用简化lambda表达式。
printString(System.out::println);

2.3、总结

(1)方法引用仅针对于函数式接口使用,调用函数式接口的抽象方法时,类名::方法表示的就是对于抽象方法的实现代码;调用其他方法时,都是只能调用类中已经存在的方法。

(2)方法引用与lambda表达式相比较,方法引用的使用范围更小,方式更简洁,便于在大量复用

(3)总体而言,方法引用是lambda表达式的语法糖。

上一篇:easyui中tree控件添加自定义图标icon


下一篇:ManyToMany关联方式----