2017-04-21 22 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

哦,对,是的,我试图从测试包中访问它,所以我只是公开它。他们有这样的问题吗? –