比较器返回类型与整数不兼容

时间:2015-05-12 14:04:05

标签: java sorting debugging comparator

我试图通过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进行排序?

2 个答案:

答案 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; 
    }
});