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

Java 8 Lambda 表達(dá)式比較器使用示例代碼

 更新時間:2019年08月21日 10:12:44   作者:火炎焱  
這篇文章主要介紹了Java 8 Lambda 表達(dá)式比較器使用示例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

引言

在這個例子中,我們將向您展示如何使用 java8 lambda 表達(dá)式編寫一個 Comparator 來對 List 進(jìn)行排序。

經(jīng)典的比較器示例:

Comparator<Developer> byName = new Comparator<Developer>() {
    @Override
    public int compare(Developer o1, Developer o2) {
      return o1.getName().compareTo(o2.getName());
    }
  };

使用 lambda:

Comparator<Developer> byName = 
    (Developer o1, Developer o2)->o1.getName().compareTo(o2.getName());

1.沒有 Lambda 的排序

先新建一個 Developer 類,然后比較 Developer 對象的年齡,通常我們使用 Collections.sort 并傳遞匿名 Comparator 類,如下所示:

package com.jimzhang.lambda;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
 * 〈一句話功能簡述〉<br> 〈排序〉
 *
 * @author zhangjinmiao
 * @create 2019/8/4 10:19
 */
public class TestSorting {
 public static void main(String[] args) {
  List<Developer> listDevs = getDevelopers();
  System.out.println("Before Sort");
  for (Developer developer : listDevs) {
   System.out.println(developer.toString());
  }
  //sort by age
  Collections.sort(listDevs, new Comparator<Developer>() {
   @Override
   public int compare(Developer o1, Developer o2) {
    return o1.getAge() - o2.getAge();
   }
  });
  System.out.println("After Sort");
  for (Developer developer : listDevs) {
   System.out.println(developer);
  }
 }
 public static List<Developer> getDevelopers() {
  List<Developer> developers = new ArrayList<>();
  developers.add(new Developer("lisi", new BigDecimal("8000"),23));
  developers.add(new Developer("wangwu", new BigDecimal("9000"),24));
  developers.add(new Developer("maliu", new BigDecimal("10000"),25));
  developers.add(new Developer("zhangsan", new BigDecimal("7000"),22));
  return developers;
 }
}

當(dāng)排序要求改變時,您只需傳入另一個新的匿名 Comparator 類:

//sort by age
  Collections.sort(listDevs, new Comparator<Developer>() {
    @Override
    public int compare(Developer o1, Developer o2) {
      return o1.getAge() - o2.getAge();
    }
  });
  //sort by name  
  Collections.sort(listDevs, new Comparator<Developer>() {
    @Override
    public int compare(Developer o1, Developer o2) {
      return o1.getName().compareTo(o2.getName());
    }
  });
  //sort by salary
  Collections.sort(listDevs, new Comparator<Developer>() {
    @Override
    public int compare(Developer o1, Developer o2) {
      return o1.getSalary().compareTo(o2.getSalary());
    }
  });

這是可行的,但是,您是否覺得僅僅因為想要更改一行代碼就創(chuàng)建一個類有點奇怪?

2.使用 Lambda 排序

在 Java 8 中,List 接口直接支持排序方法,不再需要使用 Collections.sort。

//List.sort() since Java 8
  listDevs.sort(new Comparator<Developer>() {
    @Override
    public int compare(Developer o1, Developer o2) {
      return o2.getAge() - o1.getAge();
    }
  });

3.更多例子

1. 按年齡排序

//sort by age
  Collections.sort(listDevs, new Comparator<Developer>() {
    @Override
    public int compare(Developer o1, Developer o2) {
      return o1.getAge() - o2.getAge();
    }
  });
  
  //lambda
  listDevs.sort((Developer o1, Developer o2)->o1.getAge()-o2.getAge());
  
  //lambda, valid, parameter type is optional
  listDevs.sort((o1, o2)->o1.getAge()-o2.getAge());

2. 按名字排序

//sort by name
  Collections.sort(listDevs, new Comparator<Developer>() {
    @Override
    public int compare(Developer o1, Developer o2) {
      return o1.getName().compareTo(o2.getName());
    }
  });
  //lambda
  listDevs.sort((Developer o1, Developer o2)->o1.getName().compareTo(o2.getName()));    
  //lambda
  listDevs.sort((o1, o2)->o1.getName().compareTo(o2.getName()));

3. 按薪水排序

//sort by salary
  Collections.sort(listDevs, new Comparator<Developer>() {
    @Override
    public int compare(Developer o1, Developer o2) {
      return o1.getSalary().compareTo(o2.getSalary());
    }
  });        
  //lambda
  listDevs.sort((Developer o1, Developer o2)->o1.getSalary().compareTo(o2.getSalary()));
  //lambda
  listDevs.sort((o1, o2)->o1.getSalary().compareTo(o2.getSalary()));

4. 反向排序

薪水正序排序

Comparator<Developer> salaryComparator = (o1, o2)->o1.getSalary().compareTo(o2.getSalary());
  listDevs.sort(salaryComparator);

輸出:

Developer{name='zhangsan', salary=7000, age=22}
Developer{name='lisi', salary=8000, age=23}
Developer{name='wangwu', salary=9000, age=24}
Developer{name='maliu', salary=10000, age=25}

2.反向排序

Comparator<Developer> salaryComparator = (o1, o2)->o1.getSalary().compareTo(o2.getSalary());
  listDevs.sort(salaryComparator.reversed());

輸出:

Developer{name='maliu', salary=10000, age=25}
Developer{name='wangwu', salary=9000, age=24}
Developer{name='lisi', salary=8000, age=23}
Developer{name='zhangsan', salary=7000, age=22}

總結(jié)

以上所述是小編給大家介紹的Java 8 Lambda 表達(dá)式比較器使用示例代碼,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!

相關(guān)文章

  • Java并發(fā)編程之同步容器

    Java并發(fā)編程之同步容器

    這篇文章主要介紹了Java并發(fā)編程之同步容器,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • IDEA配置Maven的超詳細(xì)步驟

    IDEA配置Maven的超詳細(xì)步驟

    Maven是一個能使我們的java程序開發(fā)節(jié)省時間和精力,是開發(fā)變得相對簡單,還能使開發(fā)規(guī)范化的工具,下面這篇文章主要給大家介紹了關(guān)于IDEA配置Maven的超詳細(xì)步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • 修改maven本地倉庫路徑的方法

    修改maven本地倉庫路徑的方法

    本篇文章主要介紹了修改maven本地倉庫路徑的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 關(guān)于json序列化(javaBean轉(zhuǎn)Json的細(xì)節(jié)處理)

    關(guān)于json序列化(javaBean轉(zhuǎn)Json的細(xì)節(jié)處理)

    這篇文章主要介紹了關(guān)于json序列化(javaBean轉(zhuǎn)Json的細(xì)節(jié)處理),具有很好的參考價值,希望對大家有所幫助。
    2022-03-03
  • Java程序運行時出現(xiàn)亂碼問題的排查與解決方法

    Java程序運行時出現(xiàn)亂碼問題的排查與解決方法

    本文主要介紹了Java程序運行時出現(xiàn)亂碼問題的排查與解決方法,包括檢查Java源文件編碼、檢查編譯時的編碼設(shè)置、檢查運行時的編碼設(shè)置、檢查命令提示符的代碼頁、檢查命令提示符的字體、檢查 Java 程序的輸出代碼以及檢查環(huán)境變量,需要的朋友可以參考下
    2025-03-03
  • 通過實例解析Java List正確使用方法

    通過實例解析Java List正確使用方法

    這篇文章主要介紹了通過實例解析Java List正確使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot集成Lettuce客戶端操作Redis的實現(xiàn)

    SpringBoot集成Lettuce客戶端操作Redis的實現(xiàn)

    本文主要介紹了SpringBoot集成Lettuce客戶端操作Redis的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • Java實現(xiàn)一個簡單的定時器代碼解析

    Java實現(xiàn)一個簡單的定時器代碼解析

    這篇文章主要介紹了Java實現(xiàn)一個簡單的定時器代碼解析,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java線程池實現(xiàn)原理總結(jié)

    Java線程池實現(xiàn)原理總結(jié)

    這篇文章主要給大家分享的是Java線程池實現(xiàn)原理總結(jié),線程池參數(shù)、線程池執(zhí)行流程等內(nèi)容上總結(jié),具有一定參考戒指,需要的小伙伴可以參考一下,希望對你有所幫助
    2022-01-01
  • SpringBoot使用hutool操作FTP的詳細(xì)過程

    SpringBoot使用hutool操作FTP的詳細(xì)過程

    在使用SpringBoot結(jié)合hutool操作FTP時,遇到防火墻導(dǎo)致上傳文件大小為0kb的問題,通過設(shè)置FTP為被動模式解決,本文詳細(xì)解析了FTP的主動模式和被動模式的工作原理、安全性及適用場景,幫助理解FTP的連接方式和解決網(wǎng)絡(luò)限制問題
    2024-09-09

最新評論

阿巴嘎旗| 通榆县| 梁山县| 榆社县| 荔波县| 保康县| 天镇县| 太和县| 长汀县| 宁津县| 肇州县| 天门市| 辉县市| 长葛市| 桐梓县| 宁都县| 涞水县| 龙山县| 青州市| 阳江市| 洞头县| 惠安县| 平罗县| 滕州市| 彩票| 邳州市| 皋兰县| 开江县| 淮南市| 灵山县| 建水县| 宜兰市| 瓦房店市| 富顺县| 红安县| 文山县| 龙川县| 长乐市| 洛阳市| 克什克腾旗| 九江市|