Map<String, Map<String, List<String>>> tag2AllFunds = Maps.newHashMap(); Comparator comparator = Collator.getInstance(Locale.CHINA); tag2AllFunds.forEach((key,value) ->{ value.keySet().stream() .sorted(Comparator.comparing(k -> value.get(k).size()).reversed().thenComparing(comparator)) .collect(Collectors.toMap( en -> value.get(en), Map.Entry::getValue)); }); 修改正确这段代码
时间: 2024-02-26 17:56:32 浏览: 117
Java中对list map根据map某个key值进行排序的方法
这段代码有一些问题,因为在 `collect` 方法中使用了 `en -> value.get(en)`,这是错误的,因为它应该返回键而不是值。另外,`toMap` 方法需要指定一个合并函数,因为在排序后可能会有重复的键。正确的代码如下:
```
Map<String, Map<String, List<String>>> tag2AllFunds = Maps.newHashMap();
Comparator<String> comparator = Collator.getInstance(Locale.CHINA);
tag2AllFunds.forEach((key, value) -> {
value.entrySet().stream()
.sorted(Comparator.comparing((Map.Entry<String, List<String>> entry) -> entry.getValue().size())
.reversed()
.thenComparing(Map.Entry.comparingByKey(comparator)))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (v1, v2) -> v1, LinkedHashMap::new));
});
```
这里我们使用了 `entrySet` 方法来获取键值对,然后使用 `Map.Entry` 的 `comparingByKey` 方法来按键排序。在 `toMap` 方法中,我们使用了一个合并函数,它将两个值合并为一个。此外,我们还使用了一个 `LinkedHashMap` 来保留顺序。
阅读全文