2017-04-21 70 views
0

我已經創建了自定義比較器,我知道如何使用collections.sort但是我想知道如何使用它只有兩個對象。自定義比較器使用單個對象

所以在我的個人類比較代碼看起來像這樣

//Default comparator by score 
    @Override 
public int compareTo(Person p) 
{ 
    return Double.compare(p.score, score); 
} 
//Custom comparator by name 
static Comparator<Person> nameComparator() 
{ 
    return (Person o1, Person o2) -> o1.getName().compareToIgnoreCase(o2.getName());  
} 

要使用默認compartor是不錯,但我如何使用自定義的 像這樣

//Default 
int result = p.compareTo(p4); 

//Not sure how to use this one 
int result2 = p.compareTo(nameComparator(p4)); 

p和p4是人對象

回答

1

Comparator<Person>是一個類,它有一個方法compare(Person, Person)它的方法。

所以,只要調用此方法,通過你的兩個實例作爲參數:

int result2 = nameComparator().compare(p, p4); 

注意,你可以做你的「默認」的例子也與natural ordering comparator

int result = Comparator.naturalOrder().compare(p, p4); 

這是相同的到p.compare(p4)

+0

謝謝我意識到我遇到的其他問題是我的比較器不公開,所以我無法從課堂以外的地方訪問它 –

+0

「所以我無法從課堂以外訪問它」您將能夠在課堂之外訪問它;只是不在包裝外面。 –

+0

哦,對,是的,我試圖從測試包中訪問它,所以我只是公開它。他們有這樣的問題嗎? –