1. 程式人生 > >Java8——Lambda表示式入門

Java8——Lambda表示式入門

之前一直有聽說過Lambda表示式,但是一直也沒有使用過,最近學習了一下,感覺還不錯,簡單方便,把原來需要很多行才能實現的功能可以直接一行實現。不過最好也不要盲目的使用,並不是所有情況都適合用它!

引用一段大佬的話——超過3行的邏輯就不適用Lambda表示式了。雖然看著很先進,其實Lambda表示式的本質只是一個"語法糖",由編譯器推斷並幫你轉換包裝為常規的程式碼,因此你可以使用更少的程式碼來實現同樣的功能。本人建議不要亂用,因為這就和某些很高階的黑客寫的程式碼一樣,簡潔,難懂,難以除錯,維護人員想罵娘。

接下來舉幾個基本的例子:

// 1. 不需要引數,返回值為 3

() -> 3

// 2. 接收一個數字型別的引數,返回它乘以2的值

x -> 2 * x

// 3. 接受2個數字型別引數,並返回他們的差值

(x, y) -> x – y

// 4. 接收2個int型整數,返回他們的積

(int x, int y) -> x * y

// 5. 接受一個 String 型別的物件,在控制檯列印,不返回任何值

(String a) -> System.out.print(a)

然後再舉幾個用Lambda表示式遍歷List集合的例子,多行操作需要在{}中進行,這也是最常用的,如:

package com.sixmac.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class LambdaTest {
    public static void main(String[] args) {
        List<String> list = listAdd();

        for (String s:list) {   //遍歷集合的一般寫法
            System.out.println(s);
        }
    //----------------------------這些方法遍歷出來的值都相同---------------------------------------------------------
        //這裡的l只是一個引數
     list.forEach(l -> System.out.println(l));//遍歷集合的Lambda表示式寫法
        list.forEach(System.out::println);//等同於上面的寫法
        
        //如果要在Lambda表示式中進行多行程式碼的操作,需要在{}中進行,例如:
        list.forEach(l->{
            if(l.equals("XF1")){
                System.out.println(l);
            }
        });
    }

    /**
     * 建立一個list集合
     * @return
     */
    public static List<String> listAdd(){
        List<String> list = new ArrayList<>();
        for(int i=0;i<5;i++){
            list.add("XF"+i);
        }
        return list;
    }
}

如果要對Map集合進行遍歷和操作,跟List其實大同小異,如:

package com.sixmac.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class LambdaTest {
    public static void main(String[] args) {
        Map<Integer, Integer> map = mapAdd();
        //一般遍歷map集合的寫法
        for (Map.Entry<Integer,Integer> entry:map.entrySet()) {
            System.out.println("k:"+entry.getKey()+","+"v:"+entry.getValue());
        }
        //或者
        for (Integer k: map.keySet()) {
            System.out.println("k:"+k);
        }
        for (Integer v :map.values()) {
            System.out.println("v:"+v);
        }
        //========================兩種遍歷的列印結果是相同的======================================
        //用Lambda表示式遍歷map集合的寫法
        
        //k和v是傳進去的兩個引數
        map.forEach((k,v)-> System.out.println("k:"+k+","+"v"+v));
        //如果想在遍歷map的時候進行一些操作,需要在{}中進行,如:
        map.forEach((k,v) -> {
            v=v+2;
            map.put(k,v);
            System.out.println("k:"+k+","+"v:"+v);
        });
    }
    

    /**
     * 建立一個map集合
     * @return
     */
    public static Map<Integer,Integer> mapAdd(){
        Map<Integer, Integer> map = new HashMap<>();
        for(int i=0;i<5;i++){
            map.put(i,i);
        }
        return map;
    }
    
}

這些就是Lambda表示式的基本用法了,的確很炫酷,逼格高,不懂的人看到肯定感覺是不明覺厲,當然還有一些其他的功能,大家感興趣的話可以自己多研究研究~

 

The end!!!