Map<String,Map<String, List<String>>> 根据value中list的size排序,若数量相同则以value中首字母排序
时间: 2023-10-14 17:17:59 浏览: 128
对map里面的value进行排序
可以使用Java 8的Stream API进行排序,具体实现如下:
```java
Map<String, Map<String, List<String>>> map = ...; // 待排序的Map
Map<String, Map<String, List<String>>> sortedMap = map.entrySet().stream()
.sorted((e1, e2) -> {
int size1 = e1.getValue().values().stream().mapToInt(List::size).sum();
int size2 = e2.getValue().values().stream().mapToInt(List::size).sum();
if (size1 == size2) {
String key1 = e1.getValue().keySet().stream().findFirst().orElse("");
String key2 = e2.getValue().keySet().stream().findFirst().orElse("");
return key1.compareTo(key2);
} else {
return size2 - size1; // 按照list的size倒序排序
}
})
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (v1, v2) -> v1, LinkedHashMap::new));
```
这段代码首先将Map转换成Entry集合,然后使用Stream API进行排序。排序规则是,根据value中所有list的size之和进行倒序排序,若size相同则根据value中第一个key的字典序进行排序。最后使用collect方法将排序后的结果转换回Map,并保持插入顺序。
阅读全文