lambda表达式
λ是希腊字母
避免匿名内部类定义过多
属于函数式编程
函数式接口时java8 lambda的核心所在
函数式接口的定义:
1、任何接口。如果只包含唯一一个抽象方法,那麽他就是一个函数式接口。
例如:
public interface Runnable{
public abstract void run();
}
2、对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。
lambda的演化过程
public class TestLambda1 {
/**
* 2、定义一个实现类
*/
static class Like2 implements ILike{
@Override
public void lambda() {
System.out.println("test lambda2");
}
}
public static void main(String[] args) {
//通过实现类
ILike like = new Like1();
like.lambda();
like = new Like2();
like.lambda();
/**
* 局部内部类
* 注意:要先有内部类,才能使用。
*/
class Like3 implements ILike{
@Override
public void lambda(){
System.out.println("test lambda3");
}
}
like = new Like3();
like.lambda();
/**
* 4、匿名内部类
*/
like = new ILike() {
@Override
public void lambda() {
System.out.println("test lambda4");
}
};
like.lambda();
/**
* lambda 表达式
*/
like = ()->{
System.out.println("test lambda5");
};
like.lambda();
}
}
/**
* 定义一个函数式接口
*/
interface ILike{
void lambda();
}
/**
* 1、定义一个实现类
*/
class Like1 implements ILike{
@Override
public void lambda() {
System.out.println("test lambda1");
}
}
lambda表达式的简化
1、实体类
public class TestLambda{
public static void main(String[] args){
Test t = new MyTest();
t.f("张三");
}
}
//函数式接口
interface Test{
void f(String a);
}
//实现类
class MyTest implements Test{
@Override
public void f(String a){
System.out.println(a+"在测试λ表达式的简化写法。");
}
}
2、两个参数的lambda表达式的简化,参数要加()
public class TestLambda {
public static void main(String[] args){
Test t = (a,b) ->System.out.println(a+"在测试λ表达式的简化写法。");
t.f("张三","李四");
}
}
//函数式接口
interface Test{
void f(String a, String b);
}
3、接口方法的实现如果有个两句或者多句表达式,那么需要加{}
public class TestLambda {
public static void main(String[] args){
Test t = a ->{
System.out.println(a+"在测试λ表达式的简化写法。");
System.out.println(a+"在测试λ表达式的简化写法。");
};
t.f("张三");
}
}
//函数式接口
interface Test{
void f(String a);
}
4、一个参数的lambda表达式的简化
public class TestLambda {
public static void main(String[] args){
//原始的表达式写法
Test t = (String a)->{
System.out.println(a+"在测试λ表达式的简化写法。");
};
t.f("张三");
----------------------------------------------------
可以将类型去掉,去掉小括号和大括号,只保留最核心的代码
----------------------------------------------------
//简化后的写法
Test t = a->System.out.println(a+"在测试λ表达式的简化写法。");
t.f("张三");
}
}
//函数式接口
interface Test{
void f(String a);
}