育碧開啟免費週末《渡神紀 芬尼斯崛起》免費玩
阿新 • • 發佈:2021-11-26
Lambda 表示式
- λ希臘字母表整個排序第十一位的字母,英語名稱為Lambda
- 避免匿名內部類定義過多
- 其實質屬於函數語言程式設計的概念
-
為什麼要使用lambda表示式
-
避免內部類定義過多
-
可以讓你的程式碼開起來很簡潔
-
去掉一堆沒有意義的程式碼,只留下核心的邏輯
-
-
也許你會說,我看了Lambda表示式,不但不覺得簡介,反而覺得更亂,看不懂了。那是因為我們還沒有習慣,用的多了看習慣了,就好了。
-
理解Function Interface(函式式介面)式學習Java8lambda表示式的關鍵所在
-
函式式介面的定義:
-
任何介面,如果只包含唯一一個抽象方法,那麼他就是一個函式式介面。
-
Public interface Runnable{
public abstract void run();
}
-
對於函式式介面,我們可以通過lambda表示式來建立該介面的物件.
package com.xiancheng.demo02; /* 推導Lambda表示式 */ public class TestLambda { //3.靜態內部內 static class Like2 implements ILike{ @Override public void lambda() { System.out.println("i like lambda2"); } } public static void main(String[] args) { ILike like = new Like(); like.lambda(); like = new Like2(); like.lambda(); //4.區域性內部類 class Like3 implements ILike{ @Override public void lambda() { System.out.println("i like lambda3"); } } like = new Like3(); like.lambda(); //5.匿名內部類,沒有類的名稱,必須藉助介面或者父類 like = new ILike() { @Override public void lambda() { System.out.println("i like lambda4"); } }; like.lambda(); //6.用Lambda簡化 like = () -> { System.out.println("i like lambda5"); }; like.lambda(); } } //1.定義一個函式式介面 interface ILike{ void lambda(); } //實現類 class Like implements ILike{ @Override public void lambda() { System.out.println("i like lambda"); } }
介面調
package com.xiancheng.demo02; public class TestLambda2 { public static void main(String[] args) { ILove love = new Love(); love.Love(2); } } interface ILove{ void Love(int a); } class Love implements ILove{ @Override public void Love(int a) { System.out.println("i love you-->"+2); } }
靜態內部類
package com.xiancheng.demo02;
public class TestLambda2 {
static class Love implements ILove{
@Override
public void Love(int a) {
System.out.println("i love you-->"+2);
}
}
public static void main(String[] args) {
ILove love = new Love();
love.Love(2);
}
}
interface ILove{
void Love(int a);
}
區域性內部類
package com.xiancheng.demo02;
public class TestLambda2 {
public static void main(String[] args) {
class Love implements ILove{
@Override
public void Love(int a) {
System.out.println("i love you-->"+2);
}
}
ILove love = new Love();
love.Love(2);
}
}
interface ILove{
void Love(int a);
}
匿名內部類
package com.xiancheng.demo02;
public class TestLambda2 {
public static void main(String[] args) {
ILove love = new ILove() {
@Override
public void Love(int a) {
System.out.println("i love you-->"+2);
}
};
love.Love(2);
}
}
interface ILove{
void Love(int a);
}
Lambda
package com.xiancheng.demo02;
public class TestLambda2 {
public static void main(String[] args) {
ILove love = (int a) -> {
System.out.println("i love you-->"+a);
};
love.Love(520);
}
}
interface ILove{
void Love(int a);
}
Lambda 簡化
package com.xiancheng.demo02;
public class TestLambda2 {
public static void main(String[] args) {
//1.lambda表示簡化
ILove love = (int a,int b) -> {
System.out.println("i love you-->"+a);
};
//簡化1.引數型別
love = (a,b)-> {
System.out.println("i love you-->"+a);
System.out.println("i love you-->"+"too");
};
//簡化括號
love = (a,b) ->{
System.out.println("i love you-->"+a);
};
//簡化花括號
love = (a,b) -> System.out.println("i love you-->"+a);
//總結:
//lambda表示式只能有一行程式碼的情況系啊才能簡化成為一行,如果有多行,那麼久用程式碼塊包裹。
//前提是介面為函式式介面
//多個引數也可以去掉引數型別,要去掉就都去掉,必須加上括號
love.Love(521,502);
}
}
interface ILove{
void Love(int a,int b);
}