最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java理論基礎(chǔ)函數(shù)式接口特點(diǎn)示例解析

 更新時(shí)間:2022年03月16日 14:02:08   作者:字母哥哥  
這篇文章主要為大家介紹了java理論基礎(chǔ)函數(shù)式接口特點(diǎn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、函數(shù)式接口是什么?

所謂的函數(shù)式接口,實(shí)際上就是接口里面只能有一個(gè)抽象方法的接口。我們上一節(jié)用到的Comparator接口就是一個(gè)典型的函數(shù)式接口,它只有一個(gè)抽象方法compare。

只有一個(gè)抽象方法?那上圖中的equals方法不是也沒有函數(shù)體么?不急,和我一起往下看!

二、函數(shù)式接口的特點(diǎn)

接口有且僅有一個(gè)抽象方法,如上圖的抽象方法compare

允許定義靜態(tài)非抽象方法

允許定義默認(rèn)defalut非抽象方法(default方法也是java8才有的,見下文)

允許java.lang.Object中的public方法,如上圖的方法equals。

FunctionInterface注解不是必須的,如果一個(gè)接口符合"函數(shù)式接口"定義,那么加不加該注解都沒有影響。加上該注解能夠更好地讓編譯器進(jìn)行檢查。如果編寫的不是函數(shù)式接口,但是加上了@FunctionInterface,那么編譯器會(huì)報(bào)錯(cuò)

甚至可以說:函數(shù)式接口是專門為lambda表達(dá)式準(zhǔn)備的,lambda表達(dá)式是只實(shí)現(xiàn)接口中唯一的抽象方法的匿名實(shí)現(xiàn)類。

三、default關(guān)鍵字

順便講一下default關(guān)鍵字,在java8之前

接口是不能有方法的實(shí)現(xiàn),所有方法全都是抽象方法

實(shí)現(xiàn)接口就必須實(shí)現(xiàn)接口里面的所有方法

這就導(dǎo)致一個(gè)問題:當(dāng)一個(gè)接口有很多的實(shí)現(xiàn)類的時(shí)候,修改這個(gè)接口就變成了一個(gè)非常麻煩的事,需要修改這個(gè)接口的所有實(shí)現(xiàn)類。

這個(gè)問題困擾了java工程師許久,不過在java8中這個(gè)問題得到了解決,沒錯(cuò)就是default方法

  • default方法可以有自己的默認(rèn)實(shí)現(xiàn),即有方法體。
  • 接口實(shí)現(xiàn)類可以不去實(shí)現(xiàn)default方法,并且可以使用default方法。

四、JDK中的函數(shù)式接口舉例

java.lang.Runnable,

java.util.Comparator,

java.util.concurrent.Callable

java.util.function包下的接口,如Consumer、Predicate、Supplier等

五、自定義Comparator排序

我們自定義一個(gè)排序器,實(shí)現(xiàn)compare函數(shù)(函數(shù)式接口Comparator唯一的抽象方法)。返回0表示元素相等,-1表示前一個(gè)元素小于后一個(gè)元素,1表示前一個(gè)元素大于后一個(gè)元素。這個(gè)規(guī)則和java 8之前沒什么區(qū)別。

下面代碼用自定義接口實(shí)現(xiàn)類的的方式實(shí)現(xiàn):按照年齡的倒序排序!

employees.sort(new Comparator<Employee>() {
    @Override
    public int compare(Employee em1, Employee em2) {
        if(em1.getAge() == em2.getAge()){
            return 0;
        }
        return em1.getAge() - em2.getAge() > 0 ? -1:1;
    }
});
employees.forEach(System.out::println);

最終的打印結(jié)果如下,按照年齡的自定義規(guī)則進(jìn)行排序。

Employee(id=8, age=79, gender=M, firstName=Alex, lastName=Gussin)
Employee(id=7, age=68, gender=F, firstName=Melissa, lastName=Roy)
Employee(id=10, age=45, gender=M, firstName=Naveen, lastName=Jain)
Employee(id=3, age=43, gender=M, firstName=Ricky, lastName=Martin)
Employee(id=4, age=26, gender=M, firstName=Jon, lastName=Lowman)
Employee(id=1, age=23, gender=M, firstName=Rick, lastName=Beethovan)
Employee(id=5, age=19, gender=F, firstName=Cristine, lastName=Maria)
Employee(id=9, age=15, gender=F, firstName=Neetu, lastName=Singh)
Employee(id=6, age=15, gender=M, firstName=David, lastName=Feezor)
Employee(id=2, age=13, gender=F, firstName=Martina, lastName=Hengis)

這段代碼如果以lambda表達(dá)式簡寫。箭頭左側(cè)是參數(shù),右側(cè)是函數(shù)體,參數(shù)類型和返回值根據(jù)上下文自動(dòng)判斷。如下:

employees.sort((em1,em2) -> {
    if(em1.getAge() == em2.getAge()){
        return 0;
    }
    return em1.getAge() - em2.getAge() > 0 ? -1:1;
});
employees.forEach(System.out::println);

以上就是java理論基礎(chǔ)函數(shù)式接口特點(diǎn)示例解析的詳細(xì)內(nèi)容,更多關(guān)于java理論基礎(chǔ)函數(shù)式接口的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中JDBC連接池的基本原理及實(shí)現(xiàn)方式

    Java中JDBC連接池的基本原理及實(shí)現(xiàn)方式

    本文詳細(xì)講解了Java中JDBC連接池的基本原理及實(shí)現(xiàn)方式,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • java時(shí)間 java.util.Calendar深入分析

    java時(shí)間 java.util.Calendar深入分析

    這篇文章主要介紹了java時(shí)間 java.util.Calendar深入分析的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java循環(huán)嵌套詳解及經(jīng)典列題

    Java循環(huán)嵌套詳解及經(jīng)典列題

    這篇文章主要給大家介紹了關(guān)于Java循環(huán)嵌套詳解及經(jīng)典列題,包括循環(huán)嵌套的結(jié)構(gòu)、變量作用域、不同類型循環(huán)的嵌套等,通過示例和經(jīng)典練習(xí)題,展示了如何使用循環(huán)嵌套解決實(shí)際問題,需要的朋友可以參考下
    2024-12-12
  • Java Predicate及Consumer接口函數(shù)代碼實(shí)現(xiàn)解析

    Java Predicate及Consumer接口函數(shù)代碼實(shí)現(xiàn)解析

    這篇文章主要介紹了Java Predicate及Consumer接口函數(shù)代碼實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java遍歷Map鍵、值和獲取Map大小的方法示例

    Java遍歷Map鍵、值和獲取Map大小的方法示例

    本篇文章主要介紹了Java遍歷Map鍵、值和獲取Map大小的方法示例,詳細(xì)的介紹了Java遍歷Map的兩種實(shí)現(xiàn)方法和大小,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • 基于java SSM springboot實(shí)現(xiàn)抗疫物質(zhì)信息管理系統(tǒng)

    基于java SSM springboot實(shí)現(xiàn)抗疫物質(zhì)信息管理系統(tǒng)

    這篇文章主要介紹了基于JAVA SSM springboot實(shí)現(xiàn)的抗疫物質(zhì)信息管理系統(tǒng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • redisson分布式鎖的用法大全

    redisson分布式鎖的用法大全

    這篇文章主要介紹了redisson分布式鎖的用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java訂單30分鐘未支付自動(dòng)取消該怎么實(shí)現(xiàn)

    Java訂單30分鐘未支付自動(dòng)取消該怎么實(shí)現(xiàn)

    在開發(fā)中往往會(huì)遇到一些關(guān)于延時(shí)任務(wù)的需求,例如生成訂單30分鐘未支付,則自動(dòng)取消,下面這篇文章主要給大家介紹了關(guān)于Java訂單30分鐘未支付自動(dòng)取消該怎么實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Java設(shè)計(jì)模式之單例模式深入探索

    Java設(shè)計(jì)模式之單例模式深入探索

    單例模式(Singleton Pattern)是 Java 中最簡單的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式,這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)創(chuàng)建自己的對(duì)象,同時(shí)確保只有單個(gè)對(duì)象被創(chuàng)建
    2021-10-10
  • 詳解Http請(qǐng)求中Content-Type講解以及在Spring MVC中的應(yīng)用

    詳解Http請(qǐng)求中Content-Type講解以及在Spring MVC中的應(yīng)用

    這篇文章主要介紹了Http請(qǐng)求中Content-Type講解以及在Spring MVC中的應(yīng)用的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評(píng)論

海门市| 绍兴县| 洛浦县| 博白县| 喀喇| 中山市| 天峻县| 岫岩| 宝清县| 郴州市| 沅陵县| 徐闻县| 简阳市| 永福县| 汉寿县| 漳州市| 白山市| 东乡| 甘德县| 井研县| 湖南省| 广汉市| 德兴市| 天长市| 新疆| 北川| 永寿县| 平和县| 台北市| 湖北省| 读书| 刚察县| 莱芜市| 兰西县| 西充县| 靖宇县| 海南省| 磴口县| 通山县| 定边县| 章丘市|