【问题标题】:Java override compareTo, LongJava 覆盖 compareTo, Long
【发布时间】:2013-10-10 16:42:07
【问题描述】:

我有一个实现 Comparable 接口的类。在这个类中,我需要重写 compareTo 方法,以便按 Long 值对对象进行排序。

我不知道如何执行的是Long类型的比较。 尝试检查值是否大于或小于另一个 Long 值时出现错误。 我知道 Long 是 long 的对象,但不知道如何比较两个 Long 的。

代码示例:

public int compareTo(MyEntry<K, V> object) {
    if (this.value < object.value)
        return -1;
    if (this.value.equals(object.value))
        return 0;

    return 1;
}

错误信息:

           operator < cannot be applied to V,V
if (this.value < object.value)
                       ^

V,V长,长

【问题讨论】:

  • 请显示您的代码尝试和您的完整错误消息。
  • Long中有compareTo方法
  • @SubirKumarSao 再详细一点,这应该是一个答案
  • @user1121487 您的 compareTo 实现似乎是错误的。发布您正在为其实施 compareTo 的类。

标签: java comparable compareto


【解决方案1】:

您的问题是MyEntry&lt;K, V&gt; 没有告诉编译器您要比较什么类型的对象。它不知道您正在比较 Long 值。最好的方法是不用担心你正在比较什么类型的对象(假设你的对象实现了 Comparable),只需使用

return this.value.compareTo(object.value);

但如果您出于某种原因想要手动执行此操作,请执行以下操作:

public int compareTo(MyEntry<K, V> object) {
    if ((Long) this.value < (Long) object.value)
        return -1;
    if (this.value.equals(object.value))
        return 0;

    return 1;
}

【讨论】:

  • 这就是我要找的。我认为类型会在那里,因为它是在类被实例化时添加的。这行得通。谢谢分配!
  • 我要补充一点,当你将你的类声明为implements Comparator 时,你可以明确指定implements Comparable&lt;KeyClass, Long&gt;,这样你就不必担心所有的转换
  • 如果valueLong,你为什么不把它委托给LongcompareTo(见Adel 的回答)?
  • @SteveKuo 这就是我在我的第一个代码块中所做的......上面有两个,你阅读了整个答案吗?
【解决方案2】:
Long l1 = new Long(3);
Long l2 = new Long(2);

return l1.compareTo(l2);

简单不?

【讨论】:

    【解决方案3】:

    看起来像这样:

    @Override
    public int compareTo(MyEntry<K, V> object) {
            if (object == null) {
                throw new NullPointerException("Null parameter");
            } else if (!this.getClass().equals(object.getClass())) {
                throw new ClassCastException("Possible ClassLoader issue.");
            } else {
                return this.longValue.compareTo(object.longValue);
            }
    
    }
    

    巧合的是,我们最近对 Java 中的比较进行了tutorial。也许它可以帮助你。

    【讨论】:

      【解决方案4】:

      将 long 转换为 Long,然后使用 Long 的 compareTo 方法。

      Java 结构良好,几乎所有可排序的类都有 compareTo 方法。

      这是一个很好的 Java 实践。

      @Override
                      public int compare(long t1, long t2) {
                          return Long.valueOf(t1).compareTo(t2);
                      }
      

      【讨论】:

      • 或 Long.compare(t1, t2) // 从 Java 1.7 开始
      【解决方案5】:

      使用 longValue() 方法比较 long 值。

      例如:-

      Long id1 = obj.getId();
      Long id2 = obj1.getId();
      
      if (id1.longValue() <= id2.longValue()) {
      Sysout.......
      }
      
      assertTrue(id1.longValue() == id2.longValue())
      

      【讨论】:

      • 从 Java 1.5 开始的自动装箱使这无关紧要
      【解决方案6】:

      较长的 compareTo 命令可能会有所帮助。 compareTo 方法返回一个整数值,以给出关于 long 是否相等、大于或小于彼此的答案。

      Long l1 = new Long(63255);
       Long l2 = new Long(71678);
       int returnVal =  l1.compareTo(l2);
      
       if(returnVal > 0) {
          System.out.println("l1 is greater than l2");
       }
       else if(returnVal < 0) {
          System.out.println("l1 is less than l2");
       }
       else {
          System.out.println("l1 is equal to l2");
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-02
        • 1970-01-01
        • 1970-01-01
        • 2011-08-23
        • 1970-01-01
        相关资源
        最近更新 更多