Map<k,List<p>> a 根据value的size排序取前10个k
时间: 2023-12-11 18:02:51 浏览: 91
可以使用Java 8中的Stream API来实现该需求。假设`a`是一个`Map<K, List<P>>`类型的Map,其中`K`为Key的类型,`P`为List中元素的类型,可以按照以下方式实现:
```java
List<K> sortedKeys = a.entrySet().stream()
.sorted(Comparator.comparingInt(entry -> -entry.getValue().size()))
.limit(10) // 取前10个
.map(Map.Entry::getKey)
.collect(Collectors.toList()); // 转换为列表
```
首先,使用`entrySet().stream()`将Map的Entry转换为Stream,然后使用`sorted()`方法对Entry进行排序,排序规则为value的size,使用`Comparator.comparingInt()`指定排序规则,并使用`-`符号将排序结果倒序,保证最大的元素排在前面。然后使用`limit()`方法取前10个Entry,最后使用`map()`方法将Entry转换为Key,并使用`collect()`方法将结果转换为列表即可。
需要注意的是,如果`a`中没有10个元素,则`sortedKeys`列表中的元素数量可能小于10。
相关问题
Map<k,List<p>> a 去value最大的前10个k
可以使用Java 8中的Stream API来实现该需求。假设`a`是一个`Map<K, List<P>>`类型的Map,其中`K`为Key的类型,`P`为List中元素的类型,可以按照以下方式实现:
```java
List<K> sortedKeys = a.entrySet().stream()
.sorted(Comparator.comparingInt((Map.Entry<K, List<P>> entry) -> entry.getValue().size()).reversed())
.limit(10) // 取前10个
.map(Map.Entry::getKey)
.collect(Collectors.toList()); // 转换为列表
```
首先,使用`entrySet().stream()`将Map的Entry转换为Stream,然后使用`sorted()`方法对Entry进行排序,排序规则为value的size,使用`Comparator.comparingInt()`指定排序规则,并使用`reversed()`方法将排序结果反转,保证最大的元素排在前面。然后使用`limit()`方法取前10个Entry,最后使用`map()`方法将Entry转换为Key,并使用`collect()`方法将结果转换为列表即可。
需要注意的是,如果`a`中没有10个元素,则`sortedKeys`列表中的元素数量可能小于10。
Map<String,Map<String, List<String>>> 根据value中list的size排序
你可以使用Java 8 Stream API中的sorted方法和Comparator来根据value中list的size排序。以下是示例代码:
```
Map<String, Map<String, List<String>>> map = new HashMap<>();
// 假设map中已经有数据
// 根据value中list的size排序
Map<String, Map<String, List<String>>> sortedMap = map.entrySet()
.stream()
.sorted(Comparator.comparing(entry -> entry.getValue().values().stream().mapToInt(List::size).sum()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new));
```
这将返回一个新的已排序的LinkedHashMap,其中每个entry的value中的list按照它们的size进行排序。
阅读全文