你好 stackoverflow 社区!
我对这些论坛很陌生,对 java 和 android 编程也相当陌生——这恰好是我问题的对象——对于任何错误,提前表示歉意!
我的问题是排序。我正在寻找一种根据我选择的字段对对象进行排序的方法(不是根据第一个字段进行排序,然后是下一个字段,等等,以比较器链接为例)。我相信我已经找到了问题的解决方案:
https://stackoverflow.com/a/5113108/1549672 https://stackoverflow.com/a/5113108/1549672
但我实际上很难让它发挥作用。我怀疑由于我缺乏java经验,我可能遗漏了一些东西,所以欢迎任何帮助!
这是我正在尝试的:
作为我的班级——
public class ItemLocation {
String title;
int id;
}
作为我的职能-
public void sort(final String field, List<ItemLocation> itemLocationList) {
Collections.sort(itemLocationList, new Comparator<ItemLocation>() {
@Override
public int compare(ItemLocation o1, ItemLocation o2) {
if(field.equals("title")) {
return o1.title.compareTo(o2.title);
} else if(field.equals("id")) {
return Integer.valueOf(o1.id).compareTo(o2.id);
}
return 0;
}
});
}
使用这些,有人可以举一个使用这种方法的例子吗?我尝试填充 ArrayList 并对其进行排序,但无济于事。
谢谢您的帮助!
你不应该回来0
来自Comparator.compare http://docs.oracle.com/javase/6/docs/api/java/util/Comparator.html#compare%28T,%20T%29方法,如果它们不相等。根据合同,这是“可以的”,但从 API 文档来看,这并不完全鼓励:
一般情况下是这样,但并不严格要求 (compare(x,
y)==0) == (x.equals(y))。一般来说,任何比较器
违反此条件应明确指出这一事实。这
推荐的语言是“注意:此比较器强加的顺序是
与平等不一致。”
我认为你应该返回一个特定的Comparator http://docs.oracle.com/javase/6/docs/api/java/util/Comparator.html对于每个字段:
Comparator<ItemLocation> titleComparator = new Comparator<ItemLocation>() {
@Override
public int compare(ItemLocation o1, ItemLocation o2) {
return o1.title.compareTo(o2.title);
}
}
Comparator<ItemLocation> idComparator = new Comparator<ItemLocation>() {
@Override
public int compare(ItemLocation o1, ItemLocation o2) {
return Integer.valueOf(o1.id).compareTo(o2.id);
}
}
public void sort(final String field, List<ItemLocation> itemLocationList) {
final Comparator<ItemLocation> comparator;
if(field.equals("title")) {
comparator = titleComparator;
} else if (field.equals("id")) {
comparator = idComparator;
} else {
throw new IllegalArgumentException("Comparator not found for " + field);
}
Collections.sort(itemLocationList, comparator);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)