2012-04-11 14 views
5

ネガティブ/ポジティブに保つ、intに長い変換java.util.ComparatorLongを持つ:私が実装したい/ 0

new Comparator<Long>() { 
    public int compare(Long l1, Long l2) { 
     // (*) 
    } 
} 

私は、オペレータ?:と解決策があります。

return l1==l2 ? 0 : (l1>l2 ? 1 : -1); 

をしかし、私はかしらありそれを実装する他の方法です。

(私はreturn (int)(l1-l2)を試していましたが、間違っています)。

+1

なぜ実装を変更したいですか?合ってます。 – dtech

+1

'return(int)Math.signum(l1-l2)'? – assylias

+0

@assylias次に、longをdoubleに変換し、doubleをintに再度変換します。また、その解決策はすべての長時間にわたって正しくない可能性があります(例えば、2^60と2^60-1の戻り値0) – dtech

答えて

12

- Long自体の実装を提供します。

public int compare(Long l1, Long l2) { 
    return l1.compareTo(l2); 
} 

一方、私はあなたがすべてでカスタムコンパレータを持っている理由はわからないんだけど、その時点で...

を編集:実際にの場合は、longの値を比較し、Java 1.7を使用している場合はLong.compare(long, long)を使用することができます。それ以外の場合は、現在の実装に進みます。

+0

ありがとう、それは私の本当の問題の簡略化されたデモです。しかし、私が見つけたのは、私が比較する必要があるのは '長い' '長い' 'ではないので、私はまだ'?: 'を使用しなければならないことが分かったのです: – Freewind

+0

@FreeWind Javaは1.6以降autoboxです。 longとlongは、メソッドシグネチャで相互に使用できます。または、単に 'new Long(long value) 'を使うことができます。 – dtech

+0

@Freewind:編集前に言っておきたければ... –

2

これは唯一正しい方法です。このトピックは既に多くの時間にわたって議論されています。もちろん、java.lang.Longは既にcompareTo関数を実装していますが、実装はまったく同じです。簡単だ

+0

最後に私はまだ '?:'を使いますが、この質問では 'Long'だからJonSkeetの答えを選ぶ必要があります。ありがとうございました! – Freewind

関連する問題