有什么區別:
public FlyingRabbit(){
list = new ArrayList<Sellable>();
}
public void sort(Comparator<Sellable> comp) {
Collections.sort(list, comp);
}
和:
public class CompareCategory implements Comparator<Sellable> {
@Override
public int compare(Sellable s1, Sellable s2) {
return (s1.getCategory()).compareTo(s2.getCategory());
}
}
我對為什么需要使用 Comparatorcomp
而不是使用compare
inside感到困惑CompareCategory
。
uj5u.com熱心網友回復:
Collections.sort(List<T>)
List
通過其元素的自然順序對給定的元素進行排序。物件的自然順序可以通過Comparable
在相應類中實作介面來定義。這個介面提供了一個方法,compareTo
,它回傳
負整數、零或正整數,因為此物件小于、等于或大于指定物件。
另一方面,根據給定Collections.sort(List<T>, Comparator<T>)
的 對 的元素進行排序。它們的自然排序將被忽略以進行排序。當's 元素已經擁有它們的自然順序但我們希望按照不同的標準對它們進行排序時,第二種方法就派上用場了。List
Comparator
List
這是一個簡單的示例,其中包含一個Person
顯示姓名、姓氏和年齡的類。
class Person implements Comparable<Person> {
private String name, lastName;
private int age;
public Person(String name, String lastName, int age) {
this.name = name;
this.lastName = lastName;
this.age = age;
}
public String getName() {
return name;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Person o) {
//Defining Person's natural ordering by creating a comparator and comparing by last name and then name the current object and the given paramter
return Comparator.comparing(Person::getLastName).thenComparing(Person::getName).compare(this, o);
}
@Override
public String toString() {
return String.format("%s %s %d", name, lastName, age);
}
public static void main(String[] args) {
List<Person> list = new ArrayList<>(List.of(
new Person("Matt", "O'Brien", 30),
new Person("Conan", "O'Brien", 25),
new Person("Frank", "Johnson", 50)
));
//Original unordered list
System.out.println(list);
//List ordered by Person's natural ordering (last name and then name)
Collections.sort(list);
System.out.println(list);
//List ordered by custom criteria (age)
Collections.sort(list, Comparator.comparing(Person::getAge));
System.out.println(list);
}
}
uj5u.com熱心網友回復:
如果 Sellable 實作了 Comparable 介面,則可以使用 Collections.sort(list)。否則,您應該創建自己的比較器并使用 Collections.sort(list, 比較器)。因為必須有一個規則來比較 Sellable 型別的元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/470520.html