一、簡單介紹lambda表達式
lambda接口滿足的條件:接口有且只有一個方法,default方法、static方法除外,@FunctionalInterface會告訴編譯器編譯的時候判斷方法到底是不是一個function的接口,標註了@FunctionalInterface的接口,如果下面方法不滿足,會報錯。
java中很多的以前的方法都加了@FunctionalInterface,比如Runnable接口、Comparator
1.lambda的的語法。
2.在哪裏如何使用lambda。
3.execute around pattern
4.Functional interfaces
5.Method references方法引用
6.Type interface類型推導。
7.Composing lambdas 組合lambda表達式。
lambda可以很清晰的定義、代表一個匿名函數。它沒有名字,但是它有一系列的參數,body,返回值類型,也有可能有一系列的異常被拋出。
匿名的
函數式的
可以被傳遞的
清晰的。
二、lambda表達式的語法構成:
parameter list arrow lambda body
(o1, o2) -> o1.getColor().compareTo(o2.getColor());
三、舉例子:
Apple.java:
package com.cy.java8; import lombok.Data; @Data public class Apple { private String color; private long weight; public Apple(String color, long weight) { this.color = color; this.weight = weight; } }
LambdaExperssion.java
package com.cy.java8; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; public class LambdaExperssion { public static void main(String[] args) { // 以前怎麼寫的,比如給Apple排序 Comparator<Apple> byColor = new Comparator<Apple>() { @Override public int compare(Apple o1, Apple o2) { return o1.getColor().compareTo(o2.getColor()); } }; List<Apple> appleList = Collections.emptyList(); appleList.sort(byColor); // 用lambda表達式 Comparator<Apple> byColor2 = (o1, o2) -> o1.getColor().compareTo(o2.getColor()); Function<String, Integer> fLambda = s -> s.length(); /** * 一步步的簡化 * 去掉花括號 * 只有1個參數,可以去掉參數列表 */ Predicate<Apple> p = (Apple a) -> { return a.getColor().equals("green"); }; Predicate<Apple> p1 = (Apple a) -> a.getColor().equals("green"); Predicate<Apple> p2 = a -> a.getColor().equals("green"); //這兩個等價 Predicate<Apple> p3 = a -> a.getColor().equals("green"); Function<Apple, Boolean> f = a -> a.getColor().equals("green"); Runnable r = () -> {}; Supplier<Apple> s = () -> new Apple("green", 2); System.out.println(s.get()); } }
總結下lambda表達式的語法:
(parameters) -> expression
(parameters) -> {statments;}
() -> {}