我在Java中有Map<String, AtomicInteger> map
,我试图根据值排序(然后打印)。我找到了一种似乎足够快的方法,首先是制作一个数组Object[] a = map.entrySet().toArray();
然后我尝试按照这样排序
Arrays.sort(a, Comparator.comparingInt((Object entry) -> entry.getValue().get()))
或者像这样:
Arrays.sort(a, new Comparator() {
public int compare(Object o1, Object o2) {
return ((Map.Entry<String, AtomicInteger>) o2).getValue()
.compareTo(((Map.Entry<String, AtomicInteger>) o1).getValue());
}
})
不幸的是,这些语法都有些错误。在第一种情况下,它无法识别函数getValue(),它在比较的秒内不起作用。有人可以建议修改语法以使其工作吗?
答案 0 :(得分:2)
这里:
Arrays.sort(a, Comparator.comparingInt((Object entry) -> entry.getValue().get()))
您声明参数为Object
。但它不是。这是一个条目。令人惊讶的是,班级Object
没有像getValue()
这样的方法!
你不应该首先给出类型:
Arrays.sort(a, Comparator.comparingInt(e -> entry.getValue().get()))
应该这样做。
是的,我错过了:第一个问题是a
应该是Entry
值不是Object[]
的数组。
此外:使用具有某种意义的名称。 a
意味着......没有。
答案 1 :(得分:1)
为什么要提取成阵列?为什么不直接在条目上使用sorted()
?
例如:
private static List<Map.Entry<String, AtomicInteger>> sortedEntries(
Map<String, AtomicInteger> map) {
return map.entrySet()
.stream()
.sorted(Comparator.comparingInt(entry -> entry.getValue().get()))
.collect(Collectors.toList());
}