Lambda表达式
Lambda表达式的语法
- 主要由三部分组成:
- 1.形参列表: 形式参数允许省略参数类型
- 2.箭头 ->
- 3.方法体: 由大括号包裹,当方法体中只有一条语句,{}可以省略
- 4.当一个方法有返回值的时候,如果只是返回一条语句,那么return和{}都可以省略,这个表达式结果自动作为返回值的结果返回
示例代码如下:
public class LambdaDemo {
public static void main(String[] args) {
// new Test().dailup(() -> {System.out.println("打电话");});
IDailup dailup = () -> System.out.println("打电话");
new Test().dailup(dailup);
IPlay play = (name) -> {
System.out.println(name);
};
new Test().play(play);
new Test().calc((m,n) -> {return m + n;});
new Test().calc((m,n) -> m + n);
}
}
class Test{
public void dailup(IDailup dailup) {
dailup.dailup();
}
public void play(IPlay play) {
play.play("Dvd播放器");
}
public void calc(ICalculate calculate) {
int addResult = calculate.calc(20, 30);
System.out.println(addResult);
}
}
interface IDailup{
void dailup();
}
interface IPlay{
void play(String name);
}
interface ICalculate{
int calc(int a, int b);
}
Lambda表达式在集合中的应用
示例代码如下:
public class ThreadDemo07 {
public static void main(String[] args) {
List<String> list =new ArrayList<>();
list.add("张三");
list.add("张三丰");
list.add("张三和");
list.forEach(new Consumer<String>() {
@Override
public void accept(String t) {
System.out.println(t);
}
});
System.out.println("----forEach的Lambda表达式---------");
list.forEach((t)->System.out.println(t));
System.out.println("------forEachRemaining-------");
Iterator<String> it=list.iterator();
it.forEachRemaining((t)->System.out.println(t));
}
}
Lambda表达式的使用
Lambda表达式是JDK1.8之后引入,本质就是方便匿名内部类的书写。只有一个抽象方法的接口就是函数式接口例如 Runnable
示例代码如下:
public class LambdaDemo01 {
public static void main(String[] args) {
new Demo().method(new Inter() {
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("show");
}
// @Override
// public void show2() {
// System.out.println("show2");
//
// }
});
// 使用Lambda表达式改进
new Demo().method(() -> System.out.println("show"));
}
}
class Demo{
public void method(Inter i) {
i.show();
}
}
@FunctionalInterface
interface Inter{
public void show();
// public void show2();
}