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);
}
運行結果: