Java8——Lambda表示式入門
阿新 • • 發佈:2018-11-14
之前一直有聽說過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!!!