Java多线程详解(三)由繁入简推导Lambda表达式
为什么要使用Lambda表达式?
-
避免匿名内部类定义过多 可以让你的代码看起来很简洁 去掉了一堆没有意义的代码,只留下核心的逻辑 理解Functional Interface(函数式接口)是学习Java8 lambda表达式的关键所在 函数式接口的定义 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口 对于函数式接口,我们可以通过lambda表达式来创建接口的对象
Lambda表达式的推导(由繁入简,体会lambda表达式的魅力)
一、用普通类实现接口
package ThreadTest;
public class TestLambda {
public static void main(String[] args) {
ILike iLike = new Like();
iLike.lambda();
}
}
//定义一个函数式接口
interface ILike{
void lambda();
}
//实现类
class Like implements ILike{
@Override
public void lambda() {
System.out.println("I like Lambda!");
}
}
二、静态内部类
package ThreadTest;
public class TestLambda {
public static void main(String[] args) {
ILike iLike = new Like();
iLike.lambda();
}
//静态内部类
static class Like implements ILike{
@Override
public void lambda() {
System.out.println("I like Lambda!");
}
}
}
//定义一个函数式接口
interface ILike{
void lambda();
}
三、局部内部类
package ThreadTest;
public class TestLambda {
public static void main(String[] args) {
//局部内部类
class Like implements ILike{
@Override
public void lambda() {
System.out.println("I like Lambda!");
}
}
ILike iLike = new Like();
iLike.lambda();
}
}
//定义一个函数式接口
interface ILike{
void lambda();
}
四、匿名内部类
package ThreadTest;
public class TestLambda {
public static void main(String[] args) {
//局部内部类,没有类的名称,必须借助接口或者父类
ILike like = new ILike() {
@Override
public void lambda() {
System.out.println("I like Lambda!");
}
};
like.lambda();
}
}
//定义一个函数式接口
interface ILike{
void lambda();
}
五、用lambda简化
package ThreadTest;
public class TestLambda {
public static void main(String[] args) {
//用lambda简化,只有一句代码的时候才能去掉花括号
ILike like = ()->System.out.println("I like lambda!");
like.lambda();
}
}
//定义一个函数式接口
interface ILike{
void lambda();
}
六、有参数的lambda表达式
package ThreadTest;
public class TestLambda {
public static void main(String[] args) {
//多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号,一个参数时可以不加
ILike like = (a,b)-> System.out.println("a="+a+" b="+b);
like.lambda(1,1.0);
}
}
//定义一个函数式接口
interface ILike{
void lambda(int a,double d);
}
上一篇:
IDEA上Java项目控制台中文乱码
