当前位置: 首页 > 知识库问答 >
问题:

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

锺离嘉容
2023-03-14

我试图通过对象属性NodeID排序一个对象,这是一个长类型。

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

       });

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

共有1个答案

顾斌
2023-03-14

不要重新发明轮子,只需从long委托给compare方法:

@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,则其实际返回 [20、10、30、100] 如果返回类型为-1,则其实际返回 [100,30,10,20] 如果返回类型为0,则其实际返回 [20] 请告诉我这表示什么? 问题答案: 返回值(不是类型是)告诉调用者(对数据进行排序的事物): 如果始终为比较器返回相同的值(o,1,-1),而不管其输入如何,那么您使用的是错

  • 问题内容: 我正在学习Java。我试图运行代码,但出现此错误:。它向我显示错误的代码部分。 为什么会这样呢? 问题答案: 这是因为在类中不能有两个具有相同名称但返回类型不同的方法。 子类不能使用与返回类型不同的超类中已经存在的方法相同的名称声明方法。 但是,子类可以声明具有与超类相同的签名的方法。我们称此为“覆盖”。 你需要这个 要么 一个好的做法是通过注释标记覆盖的方法:

  • 问题内容: 我需要编写一个比较器,它采用类型A的对象A和类型B的对象B。这两个对象不是公共对象的扩展。它们的确不同,但是我需要通过其中的通用字段来比较这两个对象。我必须使用比较器接口,因为对象存储在Set中,并且在必须对CollectionUtils执行操作之后。我在Google上搜索了一下,发现了Comparator的解决方案,但只有相同的类型。 我试图朝这个方向实施思考,但是我不知道我是否在正

  • 我需要写一个比较器,取一个a类型的对象a和一个B类型的对象B。这两个对象不是一个公共对象的扩展。他们确实是不同的,但我需要比较这两个对象在它的共同领域。我必须使用比较器接口,因为对象存储在Set中,之后我必须使用CollectionUtils进行操作。我搜索了一点点,我用比较器找到了解决方案,但只有相同的类型。 TXS 附注:我在不同的集合中添加两个对象: 之后我会这样想:

  • 我知道我误解了一些事情,但我现在知道是什么了。谁能解释一下吗?

  • 当我尝试运行代码时,我得到以下错误: 错误:(48,36)错误:RecyclerViewAdapter中的OnCreateViewWholder(ViewGroup,int)无法重写适配器中的OnCreateViewWholder(ViewGroup,int)返回类型ViewWholder与MenuItemViewWholder不兼容,其中VH是类型变量:VH扩展类Adapter中声明的ViewW