jdk 8 开始 java 引入了lambda 表达式。
lambda适用场景:
1、接口或父类
2、接口或父类只有一个方法
我们从多线程写法来推导一下:
1、外部类写法:
package com.xzlf.thread;
/**
* Lambda 表达式推导一:外部类
* @author xzlf
*
*/
public class LambdaTest01 {
public static void main(String[] args) {
ThreadA ta = new ThreadA();
new Thread(ta).start();
}
}
class ThreadA implements Runnable{
@Override
public void run() {
System.out.println("外部类");
}
}
运行结果:
2、静态内部类写:
package com.xzlf.thread;
/**
* Lambda 表达式推导二: 静态内部类
* @author xzlf
*
*/
public class LambdaTest02 {
public static void main(String[] args) {
ThreadA ta = new ThreadA();
new Thread(ta).start();
}
static class ThreadA implements Runnable{
@Override
public void run() {
System.out.println("静态内部类");
}
}
}
运行结果:
3、局部内部类写法:
package com.xzlf.thread;
/**
* Lambda 表达式推导三:局部内部类
* @author xzlf
*
*/
public class LambdaTest03 {
public static void main(String[] args) {
class ThreadA implements Runnable{
@Override
public void run() {
System.out.println("静态内部类");
}
}
ThreadA ta = new ThreadA();
new Thread(ta).start();
}
}
运行结果:
4、匿名内部类写法:
package com.xzlf.thread;
/**
* Lambda 表达式推导四:匿名内部类
* @author xzlf
*
*/
public class LambdaTest04 {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("匿名内部类");
}
}).start();
}
}
运行结果:
5、lambda表达式:省略接口名 和 方法名
package com.xzlf.thread;
/**
* Lambda 表达式推导五:lambda 表达式 :省略接口名 和 方法名
* @author xzlf
*
*/
public class LambdaTest06 {
public static void main(String[] args) {
new Thread(() -> {
System.out.println("匿名内部类");
}).start();
}
}
运行结果:
6、lambda表达式 :省略大括号(方法内只有一行代码):
package com.xzlf.thread;
/**
* Lambda 表达式推导六:lambda 表达式 :省略大括号
* @author xzlf
*
*/
public class LambdaTest05 {
public static void main(String[] args) {
new Thread(() -> System.out.println("lambda 简化")).start();
}
}
运行结果:
7、lambda表达式带参数写法:
package com.xzlf.thread;
/**
* Lambda 表达式推导七:lambda 表达式 :省略接口名 和 方法名
* @author xzlf
*
*/
public class LambdaTest07 {
public static void main(String[] args) {
ILike like = (String name) -> {
System.out.println("i like " + name);
};
like.like("lambda");
}
}
interface ILike{
void like(String name);
}
运行结果:
8、lambda表达式带参数简化写法:
方法只有一个lambda会自动匹配参数类型,可以省略参数类型和大括号:
public class LambdaTest07 {
public static void main(String[] args) {
ILike like = (name) -> System.out.println("i like " + name);
like.like("lambda");
}
}
interface ILike{
void like(String name);
}
运行结果:
9、lambda表达式带参数和返回值写法:
一样的,方法只有一个,且方法内只有一条语句时,可以省略参数类型和大括号以及 return 关键字;
public class LambdaTest07 {
public static void main(String[] args) {
Count c = (a, b) -> a + b;
int sum = c.add(10, 20);
System.out.println(sum);
}
}
interface Count{
int add(int a, int b);
}
运行结果: