六百字搞懂lambda

什麼是函數式編程

在學習lambda以前,咱們先搞清楚什麼是函數。我理解的函數就是輸入一些東西通過必定的規則後輸出。假如咱們超時買蘋果,蘋果的單價是5元,則f(x) = 5x;其中x表明咱們購買蘋果的重量,則蘋果的重量和價格對應的一種關係就是函數。咱們看看這個函數,咱們關注的重點其實就是x和5x。這樣咱們就好理解了,函數關注的重點就是入參和對應的函數規則,其餘的東西都不重要。下面咱們結合一段java代碼來分析:java

  • 函數式接口
@FunctionalInterface  
public interface Apple {  
 int buyApple(int x);  
}
  • 方法實現
public class AppleImpl implements Apple {  
 @Override  
 public int buyApple(int x) {  
​  
    return 5*x;  
 }  
 public static void main(String[] args) {  
    Apple apple = new AppleImpl();  
    int price = apple.buyApple(6);  
 }  
}

咱們根據前面定義的函數結合Lambda來重寫這個實現 ——關注入參和函數規則,即咱們關注的代碼只有:編程

(int x){  
 return 5*x;  
}

而後咱們加上lambda運算符就能夠獲得以下代碼了app

Apple apple = (int x) ->{  
 return  5*x;  
};

函數式接口

咱們的lambda表達式基於函數式接口,lambda規定接口中只能有一個須要被實現的方法。便可以有多個方法,可是隻有一個方法須要被實現。java8接口中被default修飾的方法會有默認實現。ide

@FunctionalInterface註解用來修飾函數式接口,接口要求只能由一個未被實現的方法。函數式編程

lambda表達式簡化

lambda的語法形式爲 () -> {},其中 () 用來描述參數列表,{} 用來描述方法體,-> 爲 lambda運算符 ,讀做(goes to)。函數

  1. 簡化參數類型,能夠不寫參數類型,可是必須全部參數的參數類型都不寫。
Apple apple = (x) ->{  
 return  5*x;  
};
  1. 簡化參數小括號,若是隻有一個參數則能夠省略小括號。
Apple apple = x ->{  
 return  5*x;  
};
  1. 簡化方法體大括號,若是方法只有一條語句,則能夠省略大括號,若是有返回值,不能寫return。
Apple apple = x -> 5*x

咱們就不須要使用傳統這樣優化完成以後,咱們總體的代碼就成了這樣。學習

@FunctionalInterface  
public interface Apple {  
​
    int buyApple(int x);  
}

 public static void main(String[] args) {  
    Apple apple = x -> 5*x;  
 }
相關文章
相關標籤/搜索