基础使用方法
public class MainRunner{
public static void main(){
String name = getName(name->name.substring(1,2));
}
public static String getName(INameHandler handler){
return handler.handleName("小李子的名字比较长");
}
}
public interface INameHandler(){
public String handleName(String name);
}
方法 main 中的输出结果为:name = “李子”
为什么呢?
关键还得看这一句,name->name.substring(1,2),实际上等价于创建了一个对象:
INameHandler nameHandler = new INameHandler() {
@Override
public String handleName(String name) {
return name.substring(1,2);
}
};
- name:接口方法中的参数
- ->:固定搭配(代表后面是方法中的处理代码)
- name.substring(1,2):方法实现体
当然,lambda表达式还有更加完整的写法,但是越简单是越好的。
(name)->{ return name.substring(1,2); }
- 小括号包起参数列表(参数只有一个的情况下才可以省略)。
- 花括号包方法实现体(代码只有一句的情况下才可以省略)。
- return为返回结果(代码只有一句的情况下才可以省略)。
JDK类使用lambda表达式
使用 List 来排序
List<String> names = new ArrayList<>();
names.add("134493");
names.add("234");
names.add("34543555");
names.sort((n1,n2)->n1.length()-n2.length());
而用以前的匿名内部类来处理这段代码会怎样?
List<String> names = new ArrayList<>();
names.add("134493");
names.add("234");
names.add("34543555");
names.sort(new Comparator<String>() {
@Override
public int compare(String n1, String n2) {
return n1.length()-n2.length();
}
});
很糟糕对吧,我们只是想要简单地排序一下而已。
输出Map中的所有value
Map<String, String> map = new HashMap<>();
map.put("1", "jason");
map.put("2", "lily");
map.put("3", "ben");
map.forEach((k,v)->System.out.println(v));
而用以前的匿名内部类来处理这段代码会怎样?
不说了,以前的实现方式太痛苦了。
结语
善用lambda表达式,可以少写很多代码。