Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android对数组进行排序_Java_Android_Sorting - Fatal编程技术网

Java android对数组进行排序

Java android对数组进行排序,java,android,sorting,Java,Android,Sorting,我正在尝试对数组进行排序,但由于某种原因,我的compareTo函数出现以下错误: Cannot invoke compareTo(int) on the primitive type int 我的代码: private void sortFriendList() { Arrays.sort(friendsList, new Comparator<FacebookUser>() { @Override public int compare(

我正在尝试对数组进行排序,但由于某种原因,我的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);
        }
    });     
 }
private void sortFriendList()
{
sort(friendsList,new Comparator()){
@凌驾
公共整数比较(FacebookUser lhs、FacebookUser rhs){
ChatMessages[]firstChatMessages=app.getDatabaseManager().getChatMessages(lhs.getId());
ChatMessages[]lastChatMessages=app.getDatabaseManager().getChatMessages(rhs.getId());
int firstLastMessageTime=(int)firstChatMessages[firstChatMessages.length-1].getTime();
int lastMessageTime=(int)lastChatMessages[firstChatMessages.length-1].getTime();
返回firstLastMessageTime.compareTo(lastmessagetime);
}
});     
}

应该对长类型(我已将其转换为int)中存储的数组进行排序的代码

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

在调用comapreTo方法之前,您必须将
int
包装到
Integer
对象中。

您不能在基元类型上调用compareTo,您应该使用它们的包装类Integer而不是int

不要将
long
强制转换为
int
,以避免精度损失。而是将其框到
Long

long firstLastMessageTime = //...
long lastLastMessageTime = //...
return Long.valueOf(firstLastMessageTime).compareTo(Long.valueOf(lastLastMessageTime));

compareTo
方法仅适用于对象。原语
int
不是对象。必须手动比较int值,如果该值小于、等于或大于另一个值,则返回负值、零值或正值

使用整型包装器类只是在浪费资源

今天早上,我更愿意提供一些代码:

long firstLastMessageTime = ...
long lastLastMessageTime = ...
if (firstLastMessageTime < lastLastMessageTime) {
    return -1;
}
if (firstLastMessageTime > lastLastMessageTime) {
    return 1;
}
return 0;
long firstLastMessageTime=。。。
long LastMessageTime=。。。
if(firstLastMessageTimelastLastMessageTime){
返回1;
}
返回0;
在某些情况下,可以使用firstLastMessageTime减去lastmessagetime,但如果使用负值处理,或者如果差值可能大于32位int值,则可能会导致错误。所以100%的确定,只要一直使用上面的方法


补充意见:


这个值真的是int值吗?在Java中,时间通常被定义为自1.1.1970以来的毫秒,因为数据类型很长。

对您所做的一点解释可能对OP(和其他人)更有帮助。时间很长,但我需要返回一个int,不是吗?请阅读您实现的compareTo方法的定义,应该清楚您必须返回什么。是的,您必须返回一个int值。创建两个对象而不是两个简单的if不是有点过分了吗?