Java android对数组进行排序
我正在尝试对数组进行排序,但由于某种原因,我的compareTo函数出现以下错误: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(
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不是有点过分了吗?