0

配列をソートしようとしていますが、何らかの理由で、compareTo 関数で次のエラーが発生しました。

Cannot invoke compareTo(int) on the primitive type int

私のコード:

private void sortFriendList()
{
    Arrays.sort(friendsList, new Comparator<FacebookUser>() {

        @Override
        public int compare(FacebookUser lhs, FacebookUser rhs) {                
            ChatMessage[] firstChatMessages = app.getDatabaseManager().getChatMessages(lhs.getId());
            ChatMessage[] lastChatMessages = app.getDatabaseManager().getChatMessages(rhs.getId());
            int firstLastMessageTime = (int) firstChatMessages[firstChatMessages.length-1].getTime();
            int lastLastMessageTime = (int) lastChatMessages[firstChatMessages.length-1].getTime();
            return firstLastMessageTime.compareTo(lastLastMessageTime);
        }
    });     
 }

long 型 (int にキャストしたもの) で格納されている配列購入時刻をソートすることになっているコード

4

4 に答える 4

3

compareToメソッドはオブジェクトに対してのみ機能します。プリミティブintはオブジェクトではありません。int 値を手動で比較し、この値が他の値よりも小さい、等しい、または大きい場合は、負、ゼロ、または正の値を返す必要があります。

そのために Integer ラッパー クラスを使用すると、リソースが無駄になります。

今朝、私はいくつかのコードを提供したいと思っています:

long firstLastMessageTime = ...
long lastLastMessageTime = ...
if (firstLastMessageTime < lastLastMessageTime) {
    return -1;
}
if (firstLastMessageTime > lastLastMessageTime) {
    return 1;
}
return 0;

場合によっては、firstLastMessageTime から lastLastMessageTime を引くこともできますが、負の値で処理したり、差が 32 ビットの int 値よりも大きくなる可能性がある場合は、エラーが発生する可能性があります。したがって、100%確実にするには、上記の方法を常に使用してください.


追加コメント:

値は本当に int 値ですか? 通常、時間は Java で 1.1.1970 からのミリ秒として定義され、データ型は long です。

于 2012-08-20T20:28:48.450 に答える
2

精度の低下を避けるため、にキャストしないでくださいlongintむしろそれをLong

long firstLastMessageTime = //...
long lastLastMessageTime = //...
return Long.valueOf(firstLastMessageTime).compareTo(Long.valueOf(lastLastMessageTime));
于 2012-08-20T20:28:01.013 に答える
2

このようなことを試してください

        return Integer.valueof(firstLastMessageTime).compareTo(lastLastMessageTime);

compreTo メソッドを呼び出す前に、オブジェクトにラップする必要がありintますInteger

于 2012-08-20T20:24:14.907 に答える
0

プリミティブ型で compareTo を呼び出すことはできません。そのラッパー クラスを使用する必要があります。intではなく整数

于 2012-08-20T20:28:00.910 に答える