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

Java8的Lambda和排序

 更新時(shí)間:2021年11月04日 15:04:34   作者:banq  
這篇文章主要介紹了Java8的Lambda和排序,對(duì)數(shù)組和集合進(jìn)行排序是Java 8 lambda令人驚奇的一個(gè)應(yīng)用,我們可以實(shí)現(xiàn)一個(gè)Comparators來(lái)實(shí)現(xiàn)各種排序,下面文章將有案例詳細(xì)說(shuō)明,想要了解得小伙伴可以參考一下

對(duì)數(shù)組和集合進(jìn)行排序是Java 8 lambda令人驚奇的一個(gè)應(yīng)用,我們可以實(shí)現(xiàn)一個(gè)Comparators來(lái)實(shí)現(xiàn)各種排序。

看下面案例:

static class Person {

    final String firstName;

    final String lastName;

 
  
    Person(String firstName, String lastName) {

        this.firstName = firstName;

        this.lastName = lastName;

    }

 

    @Override

    public String toString() {

        return "Person{" +

                "firstName='" + firstName + '\'' +

                ", lastName='" + lastName + '\'' +

                '}';

    }

}

Person的數(shù)據(jù)有:

List<Person> people =

Arrays.asList(

    new Person("Jane", "Henderson"),

    new Person("Michael", "White"),

    new Person("Henry", "Brighton"),

    new Person("Hannah", "Plowman"),

    new Person("William", "Henderson")

);

我們希望根據(jù)名字排序(last name),然后再根據(jù)姓(first name)排序。

在Java 7之前,我們通常是通過(guò)實(shí)現(xiàn)一個(gè)Comparator:

people.sort(new Comparator<Person>() {

  @Override

  public int compare(Person o1, Person o2) {

    int result = o1.lastName.compareTo(o2.lastName);

 

    if (result == 0)

      result = o1.firstName.compareTo(o2.firstName);

 

    return result;

  }

});

people.forEach(System.out::println);

而在Java 8中,我們可以使用lambda替代匿名函數(shù),如下:

Comparator<Person> c = (p, o) -> p.lastName.compareTo(o.lastName);

 

c = c.thenComparing((p, o) -> p.firstName.compareTo(o.firstName));

 

people.sort(c);

people.forEach(System.out::println);

在這里,Lambda表達(dá)式 (p, o) -> p.lastName.compareTo(o.lastName)替代之前的匿名函數(shù)new Comparator<Person>() {}

因?yàn)?code>Java編譯器并不能推遲對(duì)Lambda表達(dá)式類型判斷,比如延遲到將comparator傳遞到sort()方法,因此使得我們進(jìn)行鏈?zhǔn)?code>Comparator書(shū)寫(xiě)有點(diǎn)困難,

比如我們想寫(xiě)成如下:

 
XXX.thenComparing((p, o) -> p.lastName.compareTo(o.lastName))
       .thenComparing((p, o) -> p.firstName.compareTo(o.firstName))

換句話說(shuō),類型判斷是從左到右,而不是從右到左,我們可以通過(guò)創(chuàng)建一個(gè)泛型來(lái)進(jìn)行類型推斷:

class Utils {

    static <E> Comparator<E> compare() {

        return (e1, e2) -> 0;

    }

}

通過(guò)上面的compare()方法,我們可以書(shū)寫(xiě)流暢的comparator鏈:

people.sort(

    Utils.<Person>compare()

         .thenComparing((p, o) ->

              p.lastName.compareTo(o.lastName))

         .thenComparing((p, o) ->

              p.firstName.compareTo(o.firstName))

);

 

people.forEach(System.out::println);

到此這篇關(guān)于Java8的Lambda和排序的文章就介紹到這了,更多相關(guān)Java Lambda和排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis核心組成部分之SQL映射文件揭秘詳解

    Mybatis核心組成部分之SQL映射文件揭秘詳解

    MyBatis真正的力量是在映射語(yǔ)句中,下面這篇文章主要給大家介紹了關(guān)于Mybatis核心組成部分之SQL映射文件揭秘的相關(guān)資料,現(xiàn)在分享給大家,給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Spring?BeanPostProcessor后處理器源碼解析

    Spring?BeanPostProcessor后處理器源碼解析

    這篇文章主要介紹了Spring?BeanPostProcessor后處理器源碼解析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-09-09
  • 詳解java IO流之緩沖流的使用

    詳解java IO流之緩沖流的使用

    本文主要介紹了java的IO流中的緩沖流的使用,緩沖流分為字節(jié)和字符緩沖流。分享了有關(guān)它們的實(shí)例代碼,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • java用戶名密碼驗(yàn)證示例代碼分享

    java用戶名密碼驗(yàn)證示例代碼分享

    這篇文章主要介紹了java用戶名密碼驗(yàn)證示例代碼,需要的朋友可以參考下
    2014-03-03
  • java如何獲取map中value的最大值

    java如何獲取map中value的最大值

    這篇文章主要介紹了java如何獲取map中value的最大值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Spring Boot 微信小程序接入微信支付功能

    Spring Boot 微信小程序接入微信支付功能

    本文詳細(xì)介紹了使用SpringBoot框架接入微信支付的全流程,包括導(dǎo)入依賴、配置微信公眾號(hào)信息、設(shè)置配置文件、編寫(xiě)支付相關(guān)實(shí)體類和API地址常量、實(shí)現(xiàn)支付服務(wù)以及Controller層的編寫(xiě),感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Springboot?內(nèi)部服務(wù)調(diào)用方式

    Springboot?內(nèi)部服務(wù)調(diào)用方式

    這篇文章主要介紹了Springboot?內(nèi)部服務(wù)調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java基礎(chǔ)--JDK SPI概述

    java基礎(chǔ)--JDK SPI概述

    SPI是一種服務(wù)發(fā)現(xiàn)機(jī)制,本文就SPI做了詳細(xì)概述,具有很好的參考價(jià)值,希望對(duì)小伙伴們有所幫助,感興趣的朋友一起來(lái)參考參考吧
    2021-08-08
  • 如何正確控制springboot中bean的加載順序小結(jié)篇

    如何正確控制springboot中bean的加載順序小結(jié)篇

    這篇文章主要介紹了如何正確控制springboot中bean的加載順序總結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 如何解決java.net.BindException:地址已在使用問(wèn)題

    如何解決java.net.BindException:地址已在使用問(wèn)題

    當(dāng)Zookeeper啟動(dòng)報(bào)錯(cuò)“java.net.BindException:地址已在使用”時(shí),通常是因?yàn)橹付ǖ亩丝谝驯黄渌M(jìn)程占用,解決這個(gè)問(wèn)題需要按照以下步驟操作:首先,使用命令如lsof -i:2181找到占用該端口的進(jìn)程號(hào);其次,使用kill命令終止該進(jìn)程
    2024-09-09

最新評(píng)論

安国市| 邛崃市| 蒙阴县| 当涂县| 寿阳县| 晋江市| 沂水县| 栾川县| 肥城市| 巴南区| 奉化市| 靖远县| 富川| 永州市| 新巴尔虎右旗| 虞城县| 兰溪市| 新竹市| 红桥区| 合山市| 三河市| 抚州市| 三台县| 靖边县| 林甸县| 金门县| 萍乡市| 辽阳县| 凤台县| 洛川县| 绵阳市| 土默特右旗| 卢龙县| 德兴市| 隆德县| 临高县| 彰化县| 年辖:市辖区| 通江县| 丹江口市| 东乌珠穆沁旗|