在Java 8之前,您编写了几行代码来对对象集合进行排序?
在Java 8之前,您編寫了幾行代碼來對對象集合進行排序? Java 8您需要多少個?
您可以在Java 8中用一行完成。
讓我們看看下面的Employee類。
public class Employee {private String name;private Integer age;public Employee(String name, Integer age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}使用Collection的sort()方法,可以對員工列表進行排序。 sort()方法期望Comparator作為參數,以便比較兩個Employee對象。 因此,我們的第一個解決方案如下所示。
public class EmployeeComparotor implements Comparator {@Overridepublic int compare(Employee e1, Employee e2) {return e1.getAge().compareTo(e2.getAge()); } }employeeList.sort(new EmployeeComparotor());無需實現Comparator并實例化它的新實例,我們可以使用匿名類來改進程序。
employeeList.sort(new Comparator() {@Overridepublic int compare(Employee e1, Employee e2) {return e1.getAge().compareTo(e2.getAge()); } });現在,讓我們看看,如何通過使用Java 8功能來進一步改進此代碼,以減少冗長的內容。 Java 8引入了lambda表達式,該表達式允許我們將代碼傳遞給方法。 Lambda表達式可以傳遞給需要功能接口的方法。 功能接口是僅定義一種抽象方法的接口。 在Java 8中,比較器是一個功能接口。 Collection的sort()方法期望Comparator作為參數,該參數接受功能接口。 在這種情況下,比較器表示BiFunction的描述符。 BiFunction是Java 8中的功能接口。因此,您可以按以下方式將lambda表達式傳遞給sort方法。 為了按年齡對員工列表進行排序,您需要如下一行。
employeeList.sort((Employee e1, Employee e2) -> e1.getAge().compareTo(e2.getAge()));Java編譯器可以通過使用lambda出現的上下文來推斷lambda表達式的參數類型。 因此,您可以刪除參數的類型并按如下所示重寫代碼。
employeeList.sort((e1, e2) -> e1.getAge().compareTo(e2.getAge()));讓我們嘗試進一步減少代碼。 Java 8 Comparator具有一個稱為compare()的靜態方法,該方法接受一個Function作為參數。 此函數應提取排序鍵并產生一個Comparator對象。 因此,對Java 8中的對象列表進行排序的最短代碼是:
employeeList.sort(comparing((e) -> e1.getAge()));代替使用lambda表達式,我們可以使用方法引用來使我們的代碼稍微冗長一些。
employeeList.sort(comparing(Employee::getAge));如果要按年齡降序對員工列表進行排序,則可以使用接口的reversed()默認方法。
employeeList.sort(comparing(Employee::getAge).reversed());現在,讓我們看一下,您要按年齡對員工進行排序,然后再按年齡對類似年齡的員工進行排序。 只是提醒一下,您是如何進行Java早期版本的。 在Java 8中,您只需使用thenComparing()方法即可。
employeeList.sort(comparing(Employee::getAge).thenComparing(Employee::getName));翻譯自: https://www.javacodegeeks.com/2018/06/sort-collection-objects-java8.html
總結
以上是生活随笔為你收集整理的在Java 8之前,您编写了几行代码来对对象集合进行排序?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux排序文件(linux 排序 文
- 下一篇: java文件序列化_通过快速Java和文