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 以来的毫秒数,因为数据类型很长。

于 2012-08-20T20:28:48.450 回答
2

尝试这样的事情

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

在调用 comapreTo 方法之前,您必须包装intInteger对象中。

于 2012-08-20T20:24:14.907 回答
2

不要投到longint避免精度损失。而是将其装箱Long

long firstLastMessageTime = //...
long lastLastMessageTime = //...
return Long.valueOf(firstLastMessageTime).compareTo(Long.valueOf(lastLastMessageTime));
于 2012-08-20T20:28:01.013 回答
0

您不能在原始类型上调用 compareTo,您应该使用它们的包装类。整数而不是整数

于 2012-08-20T20:28:00.910 回答