我需要使用Map的键对Map进行排序。先看看代码,然后听我说。我想按键排序List,然后按Value排序。毕竟结果应该是以下(仅返回List中的值):
/* The result(List):
str3
str1
str2
str4 */
-
List<String> list = ArrayList<>();
list.add("str1");
list.add("str1");
list.add("str3");
list.add("str4"); .......
Map<String, Integer> counts = new HashMap<>();
for (String item:list) {
Integer count = counts.get(item);
if (count == null) {
count = 1;
} else {
count = count + 1;
}
counts.put(item, count);
}
for (Entry<String, Integer> entry : counts.entrySet()) {
System.out.println(entry.getValue() + " " + entry.getKey());
}
-
/* The result:
2 str1
3 str2
1 str3
3 str4 */
答案 0 :(得分:1)
制作自定义比较器:
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String left, String right) {
return Integer.compare(counts.get(left), counts.get(right));
}
});
请注意,您需要counts
final
才能生效。
在你的例子上运行:
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("str1");
list.add("str2");
list.add("str3");
list.add("str4");
final Map<String, Integer> counts = new HashMap<>();
counts.put("str1", 2);
counts.put("str2", 3);
counts.put("str3", 1);
counts.put("str4", 3);
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String left, String right) {
return Integer.compare(counts.get(left), counts.get(right));
}
});
System.out.println(list);
}
}
收率:
[str3, str1, str2, str4]
答案 1 :(得分:0)
如果要阅读按键排序的Mapentries,可以使用Treemap。 购买也许你可以重新解释这个问题,结果应该是什么不太清楚。