我正在尝试通过长类型的对象属性 NodeID 对对象进行排序。

 Collections.sort(PeerNodeInChord, new Comparator<PeerNode>()
       {
           @Override public long compare(PeerNode p1, PeerNode p2)
           {
                 return p1.NodeID - p2.NodeID; // Ascending
           }

       });

我收到以下错误:



似乎我不能将“long”类型作为返回类型,而必须将“int”作为返回类型。

我不允许将 NodeID 类型更改为 int。

有没有什么办法可以通过对象属性 NodeID 对 PeerNode 的 ArrayList 进行排序?

最佳答案

不要重新发明轮子,只需从 compare 委托(delegate)给 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);
}

关于java - 比较器返回类型与整数不兼容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30193275/

10-08 21:38