【问题标题】:Why has my comparator stopped working?为什么我的比较器停止工作?
【发布时间】:2018-06-14 11:18:27
【问题描述】:

我有一个看起来像这样的方法来添加和排序:

  @Override
  public boolean add( Object o )
  {       
  boolean contains = false;
  for (Object : this) {       
      if (o1.getNum().equals(o.getNum())) {
          o = o1;
          contains = true;
          break;
      } 
  }

  if (contains) { 
      // merges
  } else {
      return //add;
  }

// Sorts ArrayList from highest to lowest product number   
    Collections.sort(this, new Comparator<Object>() {
        @Override
        public int compare(Object o1, Object o2) {
            Integer f = // get number;
            Integer s = // get number;
            if (f == s) {
                return 0;
            } else
            return f>s ? 1 : -1;
        }
   });


return true;
}

}

在没有任何其他代码的情况下,collections.sort 可以完美运行。但是,在添加第一部分后,它已停止工作。任何想法如何让它再次工作?

【问题讨论】:

  • "在添加第一部分之后"
  • 提示:整数有一个静态比较方法,可以很好地比较 int 值。最好用那个。并使用 intValue() 而不是让编译器将整数对象重复转换为 int 值。
  • 那么:您希望我们花时间帮助您解决问题,因此请您花时间正确格式化所有代码的缩进格式。从设计的角度来看,将产品编号检索为字符串然后将其解析为这样的数字简直太可怕了。您确定产品编号是作为字符串的数字吗?如果是这样 - 你为什么用字符串表示数字?
  • 当您执行if (f == s) 时,您是通过身份而不是值来比较Integer 对象。那不是你想要的。为什么不使用int
  • 只有当条目已经在列表中时,您才进行排序。如果您添加新条目,它将不会被排序。

标签: java sorting arraylist collections comparator


【解决方案1】:

如果产品产生的值不是整数,Integer.parseInt 会抛出 NumberFormatException 吗?

【讨论】:

  • 这段代码出错的方式有很多种。它还可能引发空指针异常。你真的没有回答这个问题。
  • 您说得对,可能存在解析错误以外的问题,但我们没有关于该问题的详细信息。
  • 我应该删除我的答案以避免鼓励低质量问题吗?
【解决方案2】:

我移动了我的代码并在 return //add 之后放置了 collection.sort;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多