1. 程式人生 > 資料庫 >Redis 知識突擊專用

Redis 知識突擊專用

Lamda表示式

函數語言程式設計思想

強調的是做什麼,而不是以什麼樣的方式來做,它忽略了面向物件的複雜語法,只要能夠獲取到結果,怎麼做的都不重要,重要的是結果,不重視過程.

冗餘的程式碼寫法:
public class Demo01{
      public static void main(String[] args){
            //匿名內部類的方式
            new Thread(new Runnable(){

                  @Override
                  public  void  run(){
                        System.out.println("開啟啦一個新的執行緒任務");
                  }
            }).start(;)
      }
}
程式碼分析

對於Runnable的匿名內部類用法,可以分析以下內容:

  • Thread類需要Runnable介面作為引數,其中抽象方法run用來指定執行緒任務內容的核心
  • 為了指定run方法體,不得不需要實現Runnable介面的抽象類
  • 為了省去定義一個Runnable實現類的麻煩,不得不使用匿名內部類
  • 必須重寫抽象方法run方法.所以方法的名稱,方法的引數,方法的返回值不得不再寫一遍,且不能寫錯.
  • 在這時刻,只有方法體才是執行緒任務的關鍵性內容,所以引入Landa表示式簡化程式碼
程式設計思想的轉換

做什麼.而不是怎麼做
我們真正希望的是:就是將run方法體內的程式碼傳遞給Thread類,啟動執行緒可以執行這些程式碼即可.
傳遞程式碼

是我們最終要做的事情
2014年3月Oracle官方所釋出的java8(JDK1.8)中,加入了Lamda表示式

體驗Lamda表示式的更優寫法

Java 8的新特性.優化剛才的程式碼

public class Demo01{
      public static void main(String[] args){
            //匿名內部類的方式
            new Thread(()->{
                        System.out.println("開啟啦一個新的執行緒任務");
                  }
            }).start();
      }
}

從上面的程式碼可以看出:沒有建立介面實現類物件的操作,也不再有抽象方法覆蓋重寫的操作,只寫啦執行緒任務的內容.
案例:
定義一個廚子介面,有一個抽象方法做飯的方法,無參無返回值 ,然後用Lamda表示式的方式實現輸出一條語句

//定義一個廚子介面
public interface Cook {	
      public abstract void cooking();
}
//用lamda表示式實現
public static void main(String[] args) {
	//這是匿名類的寫法	
	Cook cook= new Cook() {
		@Override
		public void cooking() {
		      System.out.println("我今天吃的是紅燒茄子,吃的好開心");	
		}
	};
	//Lamda表示式的寫法
	Cook cook = ()->{ 
		System.out.println("我今天吃的是紅燒茄子,吃的好開心");
		};
	cook.cooking();
	}
}



練習3:給定一個計算器介面, 內建了一個抽象方法計算的方法, 可以將兩個double型別的數字 相加得到和值。使用.ambda表示式來實現以上需求。(有參 有返回)
程式碼示例:
Lambda省略格式
可推導即可省略
Lambda強調的是做什麼”,而不是“怎麼做",所以凡是可以根據上下文推導得知的資訊,都可以省略。比如:

invokeSum(3.14, 3.15, (double d1,double d2) -> {
return d1 + d2;
});
//省略格式表達
invokeSum(3.14,3.15,(d1,d2) ->d1+d2);

省略的規則:
在Lambda標準格式的表示式的基礎上,使用省略寫法的規則是:
1.小括號內參數的型別可以省略。
2.如果小括號內有且僅有個引數, 則小括號也可以省略
3.如果大括號內有且僅有個語句,則無論是否有返回值, 都可以省略大括號、return關鍵字和語句的分號。

Lambda的使用前提

Lambda的語法非常的簡潔,使用非常的簡單,但是有以下注意事項:
1.使用L ambda必須具有介面,且要求介面中有且僅有一個抽象方法
無論JDK內建的Runnable、Comparator介面還是自定義的介面,只有當介面中的抽象方法存在且唯, 才可以使用L ambda
2.使用L ambda必須具有上下文推斷。
也就是方法的引數或者區域性變數型別必須為ambda對應的接]型別,才能使用L ambda作為該接[的例項。
備註: 有且僅有一個抽象方法的介面,稱為函式式介面