13

compareTo を使用して整数値と double 値を並べ替えることはできますか? 私のシステムでは、プリミティブ型 int で compareTo(int) を呼び出すことができないというエラーが表示されます。何か案は?

コード:

public int compare(Object o1, Object o2) {  
Record o1C = (Record)o1;
Record o2C = (Record)o2;                
return o1C.getPrice().compareTo(o2C.getPrice());
}

class Record
    public class Record {
    String name;
    int price;    

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
}
4

4 に答える 4

25

まあ、コンパイラの権利:)compareTo直接呼び出すことはできません。Integer.compareただし、使用している Java のバージョンによっては、( 1.7 で導入) とDouble.compare(1.4 で導入)を使用できます。

例えば:

return Integer.compare(o1C.getPrice(), o2C.getPrice());

1.7 を使用していなくても組み込みメソッドを使用したい場合は、次を使用できます。

Integer price1 = o1C.getPrice();
Integer price2 = o2C.getPrice();
return price1.compareTo(price2);

...しかし、これは不要なボクシングを使用します。大規模なコレクションを並べ替えると非常に多くの比較が実行される可能性があるため、これは理想的ではありません。compare1.7 を使用する準備が整うまでは、自分で書き直す価値があるかもしれません。それは非常に簡単です:

public static int compare(int x, int y) {
    return x < y ? -1
         : x > y ? 1
         : 0;
}
于 2013-01-06T02:03:01.700 に答える
14

コードを変更する

int price;  

Integer price;

のようなプリミティブ型intは、のようなメソッドをサポートしないためcompareTo()です。

于 2013-01-06T06:03:04.537 に答える
2

現在のコードで; 簡単な解決策は、この行を変更するだけで、すべてがうまくいくでしょう:

return o1C.getPrice() - o2C.getPrice() ;

メソッドcompare()には次の要件しかないため、これはうまく機能し、パフォーマンスも良好です。両方の値が等しい場合はゼロを返します。そうでなければ正/負の数。

于 2013-01-06T03:06:44.023 に答える