lambda表示式入門
阿新 • • 發佈:2019-02-07
關於lambda表示式
Lambda 是Jdk8推出的一個新特性,允許把函式作為一個方法的引數(函式作為引數傳遞進方法中)。
Lambda表示式只支援函式式介面 也就是只有一個抽象方法的介面。用來實現介面
使用 Lambda 表示式可以使程式碼變的更加簡潔緊湊,同時其實是在要求我們想的更多,寫的更少。
基礎表示式寫法
(params) -> expression (params) -> statement (params) -> { statements } // 1. 不需要引數,返回值為 5 () -> 5 // 2. 接收一個引數(數字型別),返回其2倍的值 x -> 2 * x // 3. 接受2個引數(數字),並返回他們的差值 (x, y) -> x – y // 4. 接收2個int型整數,返回他們的和 (int x, int y) -> x + y // 5. 接受一個 string 物件,並在控制檯列印,不返回任何值(看起來像是返回void) (String s) -> System.out.print(s)
常見lambda表示式使用場景
-
替代匿名內部類 最常見的就是建立執行緒了,用()->就可以代替整個匿名內部類,()中可以傳唯一方法的引數,->後是方法的實現。其實就像是簡化具體類的建立,不過只針對只有一個方法的介面、抽象類。
public static void main(String[] args) { Thread thread1 = new Thread(new Runnable() { @Override public void run() { System.out.println(add(1, 2)); } }); thread1.start(); new Thread( () -> System.out.println(add(2, 2))).start(); } public static int add(int a, int b) { return a + b; }
-
使用lambda表示式對集合進行迭代
public static void main(String[] args) { //遍歷list List<String> list = Arrays.asList("a", "b", "c", "d"); List<String> newList = new ArrayList<>(); list.forEach(str -> add(str, newList)); System.out.println(newList.size()); newList.forEach(str -> System.out.println(str)); //遍歷map Map<Integer, String> map = new HashMap<>(); map.put(1, "a"); map.put(2, "b"); map.forEach((k,v) -> System.out.println(k +" "+ v)); //遍歷set Set<String> set = new HashSet<>(); set.add("a"); set.add("b"); set.forEach(str -> System.out.println(str)); } private static void add(String str, List<String> list) { list.add(str); }
3.用lambda表示式實現map
需要用到JDK8新特性Stream,後續繼續學習這個。Java 8 中的 Stream 是對集合(Collection)物件功能的增強,它專注於對集合物件進行各種非常便利、高效的聚合操作(aggregate operation),或者大批量資料操作 (bulk data operation)
public static void main(String[] args) { //list轉map,collect取決與傳入的Collectors規則 //Collectors.toMap()會收集list,按定義的規則轉成map List<String> list = Arrays.asList("a", "b", "c", "d"); Map map = list.stream().collect(Collectors.toMap(k -> k+1, v -> v+"a")); System.out.println(map); }