欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
java 8 新特性(1.函數式接口 - Functional Interface)
1.函數式接口(Functional Interface):
所謂的函數式接口,當然首先是一個(gè)接口,然后就是在這個(gè)接口里面只能有一個(gè)抽象方法。這種類(lèi)型的接口也稱(chēng)為SAM接口,即Single Abstract Method interfaces。


1.1  函數式接口里允許定義默認方法:
函數式接口里是可以包含默認方法,因為默認方法不是抽象方法,其有一個(gè)默認實(shí)現,所以是符合函數式接口的定義的;
1.2  函數式接口里允許定義靜態(tài)方法:
函數式接口里是可以包含靜態(tài)方法,因為靜態(tài)方法不能是抽象方法,是一個(gè)已經(jīng)實(shí)現了的方法,所以是符合函數式接口的定義的;
1.3  函數式接口里允許定義Java.lang.Object里的public方法:
函數式接口里是可以包含Object里的public方法,這些方法對于函數式接口來(lái)說(shuō),不被當成是抽象方法(雖然它們是抽象方法);因為任何一個(gè)函數式接口的實(shí)現,默認都繼承了Object類(lèi),包含了來(lái)自java.lang.Object里對這些抽象方法的實(shí)現;

1.4  函數式接口里允許子接口繼承多個(gè)父接口,但每個(gè)父接口中都只能存在一個(gè)抽象方法,且必須的相同的抽象方法。


下面給出幾個(gè)函數式接口的例子:

@FunctionalInterfacepublic interface Predicate<T> {    boolean test(T t);    default Predicate<T> and(Predicate<? super T> other) {        Objects.requireNonNull(other);        return (t) -> test(t) && other.test(t);    }       default Predicate<T> negate() {        return (t) -> !test(t);    }    default Predicate<T> or(Predicate<? super T> other) {        Objects.requireNonNull(other);        return (t) -> test(t) || other.test(t);    }       static <T> Predicate<T> isEqual(Object targetRef) {        return (null == targetRef)                ? Objects::isNull                : object -> targetRef.equals(object);    }
@FunctionalInterfacepublic interface Comparator<T> {        int compare(T o1, T o2);    boolean equals(Object obj);    …………
@FunctionalInterfacepublic interface A<T> extends Predicate, MyPredicate {    /**     * 1.     * 父接口 MyPredicatePredicate中存在相同的抽象方法:boolean test(T t);     * 因此子接口中的功能也只有 boolean test(T t);     */    /**     * 2.     * 如果多個(gè)父接口有各自不同的抽象方法,則子接口也會(huì )存在繼承多個(gè)抽象方法     * 此時(shí),子接口就不是函數式接口     */}

2.@FunctionalInterface注解

Java 8為函數式接口引入了一個(gè)新注解@FunctionalInterface,主要用于編譯級錯誤檢查,加上該注解,當你寫(xiě)的接口不符合函數式接口定義的時(shí)候,編譯器會(huì )報錯。加不加@FunctionalInterface對于接口是不是函數式接口沒(méi)有影響,該注解只是提醒編譯器去檢查該接口是否僅包含一個(gè)抽象方法。

3.函數式接口的運用

3.1  函數式接口也是接口,依舊可以通過(guò)之前的調用方式,通過(guò)實(shí)現類(lèi)來(lái)使用接口。

public class FunctionalInterfaceTest<T> implements Predicate<T>{    public static void main(String[] args) throws InterruptedException {        Predicate p = new FunctionalInterfaceTest();        System.out.println(p.test(1));    }    @Override    public boolean test(T t) {        return 1 % 2 == 0;    }}

3.2  通過(guò)Lambda表達式實(shí)現接口抽象方法

public static void main(String[] args) throws InterruptedException {    Predicate<Integer> p = a -> a % 2 == 1;    System.out.println(p.test(5));    System.out.println(p.test(2));}

3.3  函數式接口與之前編碼的比較

/** * java 8 之前通常使用匿名內部類(lèi)完成 */Collections.sort(dtoList, new Comparator<PlatformCouponOrderDTO>() {            @Override            public int compare(PlatformCouponOrderDTO a, PlatformCouponOrderDTO b) {                return DateUtils.getMinutesBetween(a.getTime(), b.getTime());            }        });/** * java 8 之后使用Lambda表達式實(shí)現函數式接口,使代碼量明顯減少許多 */Collections.sort(dtoList, (a, b) -> DateUtils.getMinutesBetween(a.getTime(), b.getTime()));


4.JDK 1.8 新增加的函數接口:

  • java.util.function

java.util.function 它包含了很多類(lèi),用來(lái)支持 Java的 函數式編程,該包中的函數式接口有:

序號接口 & 描述
1BiConsumer<T,U>

代表了一個(gè)接受兩個(gè)輸入參數的操作,并且不返回任何結果

2BiFunction<T,U,R>

代表了一個(gè)接受兩個(gè)輸入參數的方法,并且返回一個(gè)結果

3BinaryOperator<T>

代表了一個(gè)作用于于兩個(gè)同類(lèi)型操作符的操作,并且返回了操作符同類(lèi)型的結果

4BiPredicate<T,U>

代表了一個(gè)兩個(gè)參數的boolean值方法

5BooleanSupplier

代表了boolean值結果的提供方

6Consumer<T>

代表了接受一個(gè)輸入參數并且無(wú)返回的操作

7DoubleBinaryOperator

代表了作用于兩個(gè)double值操作符的操作,并且返回了一個(gè)double值的結果。

8DoubleConsumer

代表一個(gè)接受double值參數的操作,并且不返回結果。

9DoubleFunction<R>

代表接受一個(gè)double值參數的方法,并且返回結果

10DoublePredicate

代表一個(gè)擁有double值參數的boolean值方法

11DoubleSupplier

代表一個(gè)double值結構的提供方

12DoubleToIntFunction

接受一個(gè)double類(lèi)型輸入,返回一個(gè)int類(lèi)型結果。

13DoubleToLongFunction

接受一個(gè)double類(lèi)型輸入,返回一個(gè)long類(lèi)型結果

14DoubleUnaryOperator

接受一個(gè)參數同為類(lèi)型double,返回值類(lèi)型也為double 。

15Function<T,R>

接受一個(gè)輸入參數,返回一個(gè)結果。

16IntBinaryOperator

接受兩個(gè)參數同為類(lèi)型int,返回值類(lèi)型也為int 。

17IntConsumer

接受一個(gè)int類(lèi)型的輸入參數,無(wú)返回值 。

18IntFunction<R>

接受一個(gè)int類(lèi)型輸入參數,返回一個(gè)結果 。

19IntPredicate

:接受一個(gè)int輸入參數,返回一個(gè)布爾值的結果。

20IntSupplier

無(wú)參數,返回一個(gè)int類(lèi)型結果。

21IntToDoubleFunction

接受一個(gè)int類(lèi)型輸入,返回一個(gè)double類(lèi)型結果 。

22IntToLongFunction

接受一個(gè)int類(lèi)型輸入,返回一個(gè)long類(lèi)型結果。

23IntUnaryOperator

接受一個(gè)參數同為類(lèi)型int,返回值類(lèi)型也為int 。

24LongBinaryOperator

接受兩個(gè)參數同為類(lèi)型long,返回值類(lèi)型也為long。

25LongConsumer

接受一個(gè)long類(lèi)型的輸入參數,無(wú)返回值。

26LongFunction<R>

接受一個(gè)long類(lèi)型輸入參數,返回一個(gè)結果。

27LongPredicate

R接受一個(gè)long輸入參數,返回一個(gè)布爾值類(lèi)型結果。

28LongSupplier

無(wú)參數,返回一個(gè)結果long類(lèi)型的值。

29LongToDoubleFunction

接受一個(gè)long類(lèi)型輸入,返回一個(gè)double類(lèi)型結果。

30LongToIntFunction

接受一個(gè)long類(lèi)型輸入,返回一個(gè)int類(lèi)型結果。

31LongUnaryOperator

接受一個(gè)參數同為類(lèi)型long,返回值類(lèi)型也為long。

32ObjDoubleConsumer<T>

接受一個(gè)object類(lèi)型和一個(gè)double類(lèi)型的輸入參數,無(wú)返回值。

33ObjIntConsumer<T>

接受一個(gè)object類(lèi)型和一個(gè)int類(lèi)型的輸入參數,無(wú)返回值。

34ObjLongConsumer<T>

接受一個(gè)object類(lèi)型和一個(gè)long類(lèi)型的輸入參數,無(wú)返回值。

35Predicate<T>

接受一個(gè)輸入參數,返回一個(gè)布爾值結果。

36Supplier<T>

無(wú)參數,返回一個(gè)結果。

37ToDoubleBiFunction<T,U>

接受兩個(gè)輸入參數,返回一個(gè)double類(lèi)型結果

38ToDoubleFunction<T>

接受一個(gè)輸入參數,返回一個(gè)double類(lèi)型結果

39ToIntBiFunction<T,U>

接受兩個(gè)輸入參數,返回一個(gè)int類(lèi)型結果。

40ToIntFunction<T>

接受一個(gè)輸入參數,返回一個(gè)int類(lèi)型結果。

41ToLongBiFunction<T,U>

接受兩個(gè)輸入參數,返回一個(gè)long類(lèi)型結果。

42ToLongFunction<T>

接受一個(gè)輸入參數,返回一個(gè)long類(lèi)型結果。

43UnaryOperator<T>

接受一個(gè)參數為類(lèi)型T,返回值類(lèi)型也為T(mén)。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java 8 新特性概述
源碼元宇宙-lambda表達式底層執行解析
【Java】基礎49:兩個(gè)函數式接口
深入淺出 Java 8 Lambda 表達式
C# 委托知識總結
使用Spring進(jìn)行面向切面編程
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久