我在使用Comparator对对象的ArrayList的ArrayList进行排序时遇到了麻烦,我有这个简单的代码:
ArrayList<ArrayList<Object>> office = new ArrayList<ArrayList<Object>>(15);
ArrayList<Object> objectArrayList1 = new ArrayList<Object>(15);
objectArrayList1.add("Denver");
objectArrayList1.add(108);
office.add(objectArrayList1);
ArrayList<Object> objectArrayList2 = new ArrayList<Object>(15);
objectArrayList2.add("NewYork");
objectArrayList2.add(109);
office.add(objectArrayList2);
[[Denver, 118], [NewYork, 109]]
我如何按数字或字符串对其进行排序?
答案 0 :(得分:1)
您将不得不使用Collections.sort()覆盖compare()方法并创建一个新的Comparator。因为你正在使用对象,所以编写通用分类器会很困难。以下是对自定义对象的arrayList进行排序的示例
Collections.sort(finalList, new Comparator<FinalAccount>()
@Override
public int compare(FinalAccount o1, FinalAccount o2) {
Double o1Double = o1.reductionAmount;
Double o2Double = o2.reductionAmount;
return o1Double.compareTo(o2Double);
}
});
但同样这只适用于一种类型的对象,泛型会混淆因为你可能有任何类型的对象。
答案 1 :(得分:0)
您的数据模型有点偏差。 假设您要存储城市数据及其关联的“得分”以进行排序,则需要一个可包含城市及其得分的对象列表。该实体必须具有可比性。
例如
Team implements Comparable {
String city;
int score;
Team(String city, int score) {
this.city = city;
this.score = score;
}
@Override
public int compareTo(Team other) {
return this.score - other.score;
}
}
现在你可以对团队的ArrayList进行排序
List<Team> teams = Arrays.asList(new Team("New York", 101), new Team("Denver", 108));
Collections.sort(teams); // sorts in-place
您也可以使用
等自定义比较器Collections.sort(teams, new Comparator<Team>(){
@Override
public int compare(Team t1, Team t2) {
return t1.city.compareTo(t2.city);
}
})