Lamda表达式
1.函数式接口
一个接口只有一个方法。
2.Lamda使用
// 接口
interface TestLambda1 {
void Hello();
}
//1.实现类
class MyLambda implements TestLambda1 {
@Override
public void Hello() {
System.out.println("hello world1!");
}
}
public class TestLambda {
//2.静态内部类
static class MyLambda2 implements TestLambda1 {
@Override
public void Hello() {
System.out.println("hello world2!");
}
}
public static void main(String[] args) {
TestLambda1 myLambda = new MyLambda();
myLambda.Hello();
myLambda = new MyLambda2();
myLambda.Hello();
//3.局部内部类
class MyLambda3 implements TestLambda1 {
@Override
public void Hello() {
System.out.println("hello world3!");
}
}
myLambda = new MyLambda3();
myLambda.Hello();
//4.匿名内部类
myLambda = new TestLambda1() {
@Override
public void Hello() {
System.out.println("hello world4!");
}
};
myLambda.Hello();
//5.Lambda表达式
myLambda = () -> {
System.out.println("hello world5!");
};
myLambda.Hello();
}
}
3.基础语法
(params)-> expression [ 表达式 ]
(params)-> statement [ 语句 ]
(params)-> { statements }
//参数可以为空,但仍然需要提供括号
()-> System.out.println("haha");
//多行代码时需要用{}包裹,还可以使用return语句
(int x)->{ System.out.println(x);return x*x;}
//可以不指定的返回类型。返回类型总是会由上下文推导得出
(String first,String second)->first.length()-second.length();
//当参数类型可以通过上下文推导出来,参数类型可以省略
//比如下面,lambda表达式被赋值给一个字符串比较器,所以编译器可以推导出
//参数类型是String
Comparator<String> comp = (first,second)->first.length()-second.length();
//当参数只有一个,且类型可以由上下文推导而出的时候,小括号可以省略
ActionListener listener = event -> System.out.println("现在的时间为:"+new Date());