У меня есть список карт, в которых у меня есть две категории: «foo» и «bar»! С моей функцией теперь я могу Итерацию его и сортировать по обув с этим:Как сортировать список карт по двум категориям?
public List<Map<String, Object>> makeAllSkillsMaps(List<Stuff> li) {
List<Map<String, Object>> l = new LinkedList<Map<String, Object>>();
List<Skill> w_l = li;
for (Stuff stuff : w_l) {
Map<String, Object> r_m = new HashMap<String, Object>();
r_m.put("ID", stuff.getID());
r_m.put("Bar", stuff.getBar());
r_m.put("Foo", stuff.getFoo());
l.add(r_m);
}
Comparator<Map<String, Object>> mapComparator = new Comparator<Map<String, Object>>() {
public int compare(Map<String, Object> m2, Map<String, Object> m1) {
return ((String) m1.get("Foo").toString()).compareTo((String) m2.get("Foo").toString());
}
};
l.sort(mapComparator);
return l;
}
Есть элегантный способ сортировки это два categorys, так что я его первый sortet на Foo, а затем Bar:
Foo | Bar | ID
============================
A | 1 | 922
A | 2 | 726
B | 5 | 121
B | 98 | 654
G | 1 | 823
G | 7 | 324
возможно дубликат [Мульти критериев сортировки списка объектов с Гуава Заказ] (http://stackoverflow.com/questions/15532880/multi-criteria-sorting-of-a-list-of-objects -with-guava-ordering) – Joe
Возможно, вы захотите посмотреть [ComparatorChain] (https://commons.apache.org/proper/commons-collections/javadocs/api-2.1.1/org/apache/commons/ сборники/компараторы/ComparatorChain.html) – A4L
@Joe Спасибо, что напомнили мне об этом вопросе. Я также прочитал его, но я не думаю, что эти два являются дубликатами, так как у меня совершенно другой подход. – user3383458