0

Java でいくつかのコンパレーターを実装する必要があります。

私は多くの既知のクラス、、、、... 、A1を持っています。これらはすべてクラスを拡張します。私がしたいのは、次のようなGuava に基づくコンパレータークラスです。A2A3AnAOrdering

Ordering<A> sorterType1 = new Ordering<A>() {
        // Here, provide a Set or something similar that keeps in memory
        // the class types and the associated priority. 

        @Override
        public int compare(A left, A right) {
           // return -1 if class of left has an higher priority wrt class of right; 
           // return  0 if class of left has the same priority wrt class of right; 
           // return  1, otherwise.
        }

多くの異なるコンパレーターを開発する必要があるため、各コンパレーターごとに異なるいくつかの優先度があるため、クラス型内に優先度を設定したくありません。私が見逃しているのは、コメントのある部分です。

コメント付きの部分の最も効果的かつ効率的な実装は何ですか?

4

1 に答える 1

6

比較の実装を自分で書かないでください。Ordering超能力を使用してください (Ordering#explicit(List)正確には):

List<Class<? extends A>> myOrder = ImmutableList.of(
    A1.class, A4.class, A3.class, A2.class);
Ordering<A> explicitByClassOrdering = Ordering.explicit(myOrder)
    .onResultOf(new Function<A, Class<? extends A>>() {
      @Override public Class<? extends A> apply(A a) {
        return a.getClass();
      }
    });

System.out.println(explicitByClassOrdering.sortedCopy(
    ImmutableList.of(new A3(), new A2(), new A3(), new A1(), new A4())));
// [Test$A1, Test$A4, Test$A3, Test$A3, Test$A2]
于 2013-04-25T11:28:37.123 に答える