【发布时间】: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