【发布时间】:2021-10-07 22:44:25
【问题描述】:
我有一个Map,由一个String 和一个对应的List 组成。这些列表有不同的大小:
Map<String, List<String>> map = new LinkedHashMap<>();
List<String> l1 = new ArrayList<>();
List<String> l2 = new ArrayList<>();
List<String> l3 = new ArrayList<>();
l1.add("Str1");
l1.add("Str2");
l2.add("Str1");
l2.add("Str2");
l2.add("Str3");
l3.add("Str1");
map.put("Category A", l1);
map.put("Category B", l2);
map.put("Category C", l3);
我想按Lists 的大小,按降序对Map 的条目进行排序。所以在我的例子中,最终结果应该是:
Category B: Str1, Str2, Str3
Category A: Str1, Str2
Category C: Str1
我试过了:
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
entry.getValue().sort(new Comparator<String>() {
public int compare(ArrayList a1, ArrayList a2) {
return a2.size() - a1.size();
}
});
但我明白了:
java: <anonymous com.app.class> is not abstract and does not override abstract method compare(java.lang.String,java.lang.String) in java.util.Comparator
【问题讨论】:
-
LinkedHashMap 没有实现 SortedMap。如果你可以切换到使用 TreeMap,你可以在其上使用 Collections.sort()。
-
事实上,您将单个列表从地图中拉出,并尝试对它们进行排序,这无助于您重新排列地图内的列表。
标签: java list sorting dictionary