我试图通过long类型的对象属性NodeID对对象进行排序。
Collections.sort(PeerNodeInChord, new Comparator<PeerNode>()
{
@Override public long compare(PeerNode p1, PeerNode p2)
{
return p1.NodeID - p2.NodeID; // Ascending
}
});
我收到以下错误:
比较(PeerNode,PeerNode)无法实现 比较(T,T)在比较器返回类型中长不兼容 int其中T是一个类型变量: T扩展了在Comparator接口中声明的Object
似乎我不能将类型“long”作为返回类型,并且必须将“int”作为返回类型。
我不允许将NodeID类型更改为int。
有没有办法通过long类型的对象属性NodeID对PeerNode的ArrayList进行排序?
答案 0 :(得分:5)
不要重新发明轮子,只需委托compare
中的Long
方法:
@Override
public int compare(PeerNode p1, PeerNode p2) {
return Long.compare(p1.NodeID, p2.NodeID);
}
出于好奇,您可以查看Long.compare
实现:
public static int compare(long x, long y) {
return (x < y) ? -1 : ((x == y) ? 0 : 1);
}
答案 1 :(得分:4)
Collections.sort(PeerNodeInChord, new Comparator<PeerNode>() {
@Override
public int compare(PeerNode p1, PeerNode p2) {
long dif = p1.NodeID - p2.NodeID;
if (dif > 0) return 1;
if (dif < 0) return -1;
return 0;
}
});