禿頭星人進化記(Lambda表示式學習總結)
使用背景
原因:
(1):避免匿名內部類定義過多
(2):簡化程式碼量
(3):去雜留核
其實質屬於函數語言程式設計。
函式式介面:任何介面,如果介面中只含有一個抽象方法,那麼他就是一個函式式介面。可以通過lambda表示式來建立介面的物件
例如: 執行緒中的Runnable介面:
public interface Runnable {
//只有一個抽象方法
public abstract void run();
}
引出Lambda表示式
1:必須存在一個函式式介面
2:起初使用成員內部類
3:簡化->靜態內部類
4:簡化->區域性內部類
5:簡化->匿名內部類
6:簡化->Lambda表示式:相比於匿名內部類,由於介面名和方法名唯一不變就將其省略:…new Ilike() {
@Override
public void lambda… 省略這些後加上一個”->“即可。
總程式碼如下(示例):
public class LambdaTest {
//3:簡化->靜態內部類
static class like2 implements Ilike{
@Override
public void lambda() {
System.out.println("i like lambda2");
}
}
public static void main(String[] args) {
Ilike ilike=new like();
ilike.lambda();
new like2().lambda();
//4:簡化->區域性內部類
class like3 implements Ilike{
@Override
public void lambda() {
System.out.println("i like lambda3");
}
}
new like3().lambda();
//5:簡化->匿名內部類,沒有名字,但是必須藉助介面或者父類
Ilike like4 = new Ilike() {
@Override
public void lambda() {
System.out.println("i like lambda4");
}
};
like4.lambda();
//6:簡化->lambda表示式 相當於省去了
Ilike like5 = () -> {
System.out.println("i like lambda5!!!!!!!");
};
like5.lambda();
}
}
//1:定義一個函式式介面
interface Ilike{
void lambda();
}
//2:定義介面實現類
class like implements Ilike{
@Override
public void lambda() {
System.out.println("i like lambda!!!");
}
}
再次簡化Lambda表示式
1:之前通過內部類一步步簡化到初始形態的Lambda表示式可以根據情況再次簡化
2:這次嘗試帶引數的抽象方法
3:還是得先定義函式式介面
4:初始形態
5:一級簡化:引數前面型別可省略,多個引數不同型別也可以省略,用逗號隔開即可
6:二級簡化:引數兩邊的小括號亦可省略,但是多個引數的話就不能省略了
//String name ,int age型別可以省略,括號不能去!!!
ilove=(name,age) -> {
System.out.println("I LOVE you"+age+name);
};
7:三級簡化:程式碼行兩邊的大括號也可省略,但是多行程式碼的話就不能省略了
ilove=name -> {
System.out.println("I LOVE you"+name);
System.out.println("I LOVE you"+name);
System.out.println("I LOVE you"+name);
//這樣大括號就不能省略了!!!
};
總程式碼如下(示例):
//嘗試帶引數的抽象方法 並一步一步簡化
public class LambdaTest2 {
public static void main(String[] args) {
Ilove ilove=null;
//初始lambda
ilove=(String name)->{
System.out.println("I Love you"+name);
};
ilove.mylove("zhao you");
//一級簡化 如果是多個引數 不管型別是否相同 都可以省掉型別
ilove=(name) -> {
System.out.println("I LOVE you"+name);
};
ilove.mylove("gao lan ling");
//二級簡化 如果是多個引數 則不能去掉括號
ilove=name -> {
System.out.println("I LOVE you"+name);
};
ilove.mylove("lan ling");
//三級簡化 如果式多行程式碼命令 則不能去掉大括號
ilove=name -> System.out.println("I LOVE you"+name);
ilove.mylove("ling");
}
}
//定義函式式介面
interface Ilove{
void mylove(String name);
}
總結
之前一直不知道Lambda表示式是啥,通過一次執行緒的學習意外學到了lambda的基本使用,若有錯誤,煩請大佬指教。
相關文章
- Java 8 Lambda 表示式學習心得總結Java
- Lambda表示式總結
- Java Lambda 表示式學習筆記Java筆記
- Python學習筆記 - lambda表示式Python筆記
- 工作學習筆記(十一)Lambda 表示式筆記
- C++11 學習筆記 lambda表示式筆記
- Java中Lambda表示式的進化之路Java
- 最近學習到的Lambda表示式
- 正規表示式學習總結
- [Java學習筆記]JDK1.8新特性學習(一)Lambda表示式Java筆記JDK
- java8學習:lambda表示式(2)Java
- java8學習:lambda表示式(1)Java
- JDK1.8 Lambda 表示式的學習JDK
- Java筆記:Lambda表示式Java筆記
- JavaScript學習總結(八)正規表示式JavaScript
- Java 8新特性:lambda表示式(四)轉載總結Java
- lambda 表示式
- lambda表示式
- Java | Lambda表示式Java
- Lambda表示式(Java)Java
- java lambda 表示式Java
- 八,Lambda表示式
- Java Lambda表示式Java
- [轉]Java 8 的 lambda 表示式 Java 8 的 lambda 表示式Java
- C#進階之全面解析Lambda表示式C#
- 學習進度總結
- 《進化心理學》總結
- C# Lambda表示式詳解,及Lambda表示式樹的建立C#
- 正規表示式學習筆記筆記
- angular學習筆記(十一)-表示式Angular筆記
- 淺談lambda表示式
- Lambda表示式詳解
- Java之lambda表示式Java
- kotlin lambda表示式Kotlin
- Python - lambda 表示式Python
- Java的Lambda表示式Java
- Java 8 Lambda 表示式Java
- C++Lambda表示式C++