中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java 8 Lambda 表達式比較器使用示例代碼

發布時間:2020-09-26 15:26:06 來源:腳本之家 閱讀:145 作者:火炎焱 欄目:編程語言

引言

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

經典的比較器示例:

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;
 }
}

當排序要求改變時,您只需傳入另一個新的匿名 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());
    }
  });

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

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}

總結

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安国市| 察隅县| 大新县| 南川市| 西乌| 开远市| 临澧县| 怀远县| 桦南县| 阿坝| 微山县| 兰西县| 平塘县| 余干县| 临夏县| 无棣县| 金堂县| 永宁县| 克山县| 京山县| 左贡县| 称多县| 高平市| 木里| 舟曲县| 静海县| 赤城县| 广灵县| 石楼县| 渭南市| 忻城县| 赣州市| 厦门市| 齐齐哈尔市| 海口市| 胶南市| 股票| 郯城县| 临安市| 吉安县| 苍溪县|