1

複数のオブジェクトを設定しており、すべて同じクラスを実装しています。これらのオブジェクトにはすべて共通のメソッド「getRatio」があります。これらのオブジェクトを「getRatio」メソッドの値に対して昇順で並べ替え、オブジェクトに toString メソッドを順番に呼び出させたいと考えています。私はこのアイデアを適用しようとしましたが、番号自体だけを注文するだけでした.

    List shapeList = new ArrayList();
    shapeList.add(rectangle);
    shapeList.add(triangle_right);
    shapeList.add(isosceles);
    shapeList.add(triangle);
    shapeList.add(triangle2);
    shapeList.add(triangle3);
    Collections.sort(shapeList);
    for (Shape shape : shapeList) {
        System.out.println(shape.toString());
    }

add(RightTriangle) shapeList.add(triangle_right); に適したメソッドが見つかりません。

エラー: シンボルが見つかりません Comparable.sort(shapeList);

4

3 に答える 3

2

Arrays.sort()メソッドにComparatorを提供できます。あなたの場合、次のようになります(メソッドは共通のクラス/インターフェースにあると想定しています):getRatioShape

public class ShapeComparator implements Comparator<Shape> { 
    int compareTo (final Shape shape1, final Shape shape2) {
        return (int) Math.signum (shape1.getRatio () - shape2.getRatio ());
    }
}

次のように、共通クラスにComparableインターフェイスを実装させることもできます。

public class Shape implements Comparable<Shape> {
    int compareTo (final Shape other) {
        return (int) Math.signum (getRatio () - other.getRatio ());
    }
}
于 2012-11-20T00:40:07.717 に答える
1

Comparator他の回答を拡張すると、次のように配列を定義して並べ替えることができます。

Arrays.sort(myArray, new Comparator<MyClass>() {
    @Override
    public int compare(MyClass c1, MyClass c2) {
        return (new Double(c1.getRatio())).compareTo(c2.getRatio());
    }
});

このように複数の配列を並べ替える場合は、インターフェイスをMyClass実装するのが賢明です。Comparable


EDIT :Lists ( s などArrayList) を並べ替えるには、同様の概念を使用できますが、次のようになりますCollections.sort

Collections.sort(shapeList, new Comparator<MyClass>() {
    @Override
    public int compare(MyClass c1, MyClass c2) {
        return (new Double(c1.getRatio())).compareTo(c2.getRatio());
    }
});

関連ドキュメント:

于 2012-11-20T00:44:04.097 に答える
0

オブジェクトにComparableを実装させる必要があります。

詳細はこちら

2 つのオブジェクトの比率を比較するために、compareTo()を実装する必要があります。

これを行う方法は次のとおりです。

class Foo implements Comparable<Foo> {

    private double ratio;

    public double getRatio() {
        return ratio;
    }

    public int compareTo(Foo otherFoo) {
        if (otherFoo == null) {
            return -1;
        }
        return ratio - otherFoo.ratio;
    }

}

Foo オブジェクトの Collection をソートする方法は次のとおりです。

List<Foo> fooList = createFooList();
Collections.sort(fooList);

// print the Foos in order

for (Foo f : fooList) {
    System.out.println(f.toString());
}
于 2012-11-20T00:40:50.483 に答える