2017-04-21 1 views
0

私はカスタムコンパレータを作成しましたが、collections.sortの使用方法はわかりましたが、ただ2つのオブジェクトだけで使用する方法を知りたいと思います。単一のオブジェクトでカスタムコンパレータを使用する

は、だから私のPersonクラスにコンパレータのコードは、デフォルトのcompartorを使用するには、この

//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());  
} 

のように見える細かいですが、どのように私はカスタムにこの

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

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

Pのような1 なものを使っていますし、 p4は人物オブジェクト

答えて

1

Comparator<Person>は、メソッドcompare(Person, Person)メソッドを持つクラスです。

それでは、パラメータとして、あなたの2つのインスタンスを渡し、このメソッドを呼び出す:あなたはnatural ordering comparatorでも、あなたの「デフォルト」の例を行うことができます

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

注:

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

をこれが同一でありますp.compare(p4)

+0

ありがとうございました。コンパレータが公開されていないので、クラス外からアクセスできませんでした。他の問題を認識しました。 –

+0

「クラス外からアクセスできませんでした。クラス外にアクセスする。ちょうどパッケージの外にはありません。 –

+0

ああ、はい、テストパッケージからアクセスしようとしていたので、公開しました。彼らはそのことに何か問題がありますか? –

関連する問題