2011-08-16 9 views

答えて

4
class Foo { 

    private int id; 
    private String name; 
    private String age; 
    private int order; 
    //accessors 
} 

使用カスタムComparator

List<Foo> list = null; 
    Collections.sort(list, new Comparator<Foo>() { 

      public int compare(Foo o1, Foo o2) { 
      return Integer.valueOf(o1.getOrder()).compareTo(Integer.valueOf(o2.getOrder())); 
     } 
    }); 
+0

私はこれを整数でソートするのに慣れていましたが、オーバーフローの可能性があるため、非常に大きな値では機能しません。 Java 7では、Integer.valueOf(o1.getOrder())。compareTo(Integer.valueOf(o2.getOrder())を使用するか、>または<、またはそれらと比較するか、Integer.compare(o1.getOrder )、o2.getOrder()) –

+0

ありがとう、あなたは私に例を与えることができます –

+1

はい:-2とInteger.MAX_VALUEを比較してみてください –

1

オブジェクトがComparableを実装してください。

public class Person implements Comparable<Person> { 
    private int id; 
    private String name; 
    private int order; 

    public int compareTo(Person p) { 
     return p.order - this.order; 
    } 
} 

は、その後、任意のソートされたリストのようなPriorityQueueで、このクラスPersonのオブジェクトを使用するか、単にそのためCollections.sort(personList)を使用することができます。

+0

カスタムコンパレータを使用して、注文人 - 数字のために注文行動の自然な定義があります – Mathias

0

優先度つきキューを使用して、オブジェクトが匹敵を拡張してみましょう。

compareTo(オブジェクトo)メソッドも実装する必要があります。

2
  1. あなたがjava.lang.Comparableとのインターフェイスを実装し、のcompareTo(T 0)または他の
  2. でソートロジックを置くカスタムjava.lang.Comparatorを持っているとの比較()メソッド内のロジックを持つことができます。

ソート基準を変更しようとすると、カスタムコンパレータを実装することをお勧めします。簡単に行うことができます。

関連する問題