1.创建一个Swimming接口,然后调用接口重写swim方法,其中重写部分可以使用->简化
go(new Swimming() { @Override public void swim() { System.out.println("学生蛙泳很开心"); } }); //简化类型 System.out.println("-----Lambda简化--------"); go(()->{ System.out.println("学生蛙泳很开心"); });
2.如何区分哪些可以简化?
有@FunctionalInterface的就可以简写.
//想要降序排序,复杂形式
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
//降序排序按照Lambda重写
Arrays.sort(arr, (Integer o1, Integer o2) -> {
return o2 - o1;
});
System.out.println(Arrays.toString(arr));
进一步简化
1.参数类型可以省略不写;
//降序排序按照Lambda重写
Arrays.sort(arr, (Integer o1, Integer o2) -> {
return o2 - o1;
});
//省略参数类型
Arrays.sort(arr, (o1,o2) -> {
return o2 - o1;
});
2.如果只有一个参数,参数类型可以忽略,同时()也可以省略 ;
//简化了变量类型
btn.addActionListener((e)-> {
System.out.println("点了一下我");
});
//省略括号不写
btn.addActionListener(e-> {
System.out.println("点了一下我");
});
3.如果Lambda表达式的方法体代码只有一行代码,可以省略大括号不写,同时要省略分号;
//省略括号不写
btn.addActionListener(e-> System.out.println("点了一下我"));
4.如果Lambda表达式的方法体代码只有一行代码,可以省略大括号不写.此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写.
//省略参数类型
Arrays.sort(arr, (o1,o2) -> {
return o2 - o1;
});
//省略了return,大括号,";"
Arrays.sort(arr, (o1,o2) -> o2 - o1);