私は以下のように比較するロジックを持つカスタムコンパレータを持っている:コンパレータのcompare()は、以下に実装されたメソッドの内部でどのように動作しますか?
List<String> l = new ArrayList<String>();
l.add("tendercoupon");
l.add("giftcard");
l.add("creditCard");
l.add("tendercoupon");
l.add("giftcard");
System.out.println(l);
Comparator<String> PAYMENT_METHODS = new Comparator<String>() {
@Override
public int compare(String r1, String r2) {
if("tendercoupon".equalsIgnoreCase(r1)){
return 1;
}else if("tendercoupon".equalsIgnoreCase(r2)){
return -1;
}if("paypal".equalsIgnoreCase(r1)){
return -1;
}else if("paypal".equalsIgnoreCase(r2)){
return 1;
}else{
return r1.compareTo(r2);}
}
};
Collections.sort(l, PAYMENT_METHODS);
System.out.println(l);
このため出力は次のとおりです。[クレジットカード、ギフトカード、ギフトカード、tendercoupon、tendercoupon]。
メソッドを内部的にどのようにソートしているのか理解できません。
デバッグポイントを入れて確認すると分かりやすいです。 – rathna