Java8-Lambada詳解

1.Lambada使用場景

  • lambda表達式中只能爲函數式接口創建實例

補充:

什麼是函數式接口?

函數式接口是只包含一個抽象方法聲明的接口.java.lang.Runnable 就是一種函數式接口,在 Runnable 接口中只聲明瞭一個方法 void run(),相似地,ActionListener 接口也是一種函數式接口,我們使用匿名內部類來實例化函數式接口的對象,有了 Lambda 表達式,這一方式可以得到簡化。

 

2. Lambda表達式與匿名內部類的聯繫和區別

聯繫:

  • lambda表達式創建的對象與匿名內部類生成的對象一樣,可以直接調用接口中繼承的默認方法。

區別:

  • 匿名內部類可以爲任意接口創建實例,不管接口中包含多少個抽象方法,只要在匿名內部類中實現所有抽象方法即可。 但在lambda表達式中只能爲函數式接口創建實例。

  • 匿名內部類可以爲抽象類甚至普通類創建實例;但lambda表達式只能爲函數式接口創建實例。

  • 匿名內部類實現的抽象方法可以允許調用接口中定義默認方法。但lambda表達式的代碼塊不允許調用接口中定義默認方法。

4. 常見的函數式接口

4.1 Runnable

Runnable runnable = ()->{
    System.out.println(Thread.currentThread().getName());
};
        
Thread thread = new Thread(runnable);
thread.start();
  • Runnable只有一個run函數,且run函數沒有參數

4.2 Consumer接口

Consumer接口接收一個參數,不返回參數

public static void consumerFun(int value, Consumer<Integer> c) {
    c.accept(value);
}
//調用
consumerFun(1,(value)->{
    System.out.println(value);
});

4.3 BinConsumer接口

與Consumer接口一樣,只不過接收兩個參數,返回0個參數

public static void binConsumerFun(String a, String b, BiConsumer<String, String> binc) {
    binc.accept(a, b);
}
//調用
binConsumerFun("hello", "maskwang", (a,b)->{
    System.out.println(a+b)
});

4.4 Predication

作用接收一個參數,返回一個boolean值

public static boolean predicateFun(int value, Predicate<Integer> pre) {
    return pre.test(value);
}
//調用
System.out.println(predicateFun(3, x->x==3));

4.5 Supplier

作用是接收0個參數,返回一個值

public static int supplierFun(Supplier<Integer> supplier) {
    return supplier.get();
}
//調用
System.out.println(supplierFun(()->1));

4.5 Comparator

lambada表達式實現Comparator

List<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
list.add(2);
list.sort((a,b) -> {return a>b?-1:1;});
 //另一種方式
list.forEach(System.out::println)

4.6 集合的操作

實現集合的遍歷

List<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
list.add(2);
list.forEach((value)->System.out.println(value));

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章