集合通过stream按map属性的size排序
时间: 2023-07-31 17:05:31 浏览: 157
可以使用Java 8的Stream API来对集合按照map属性的size进行排序。具体的实现代码如下:
```java
List<Map<String, Object>> list = new ArrayList<>();
// 假设 list 中存放了多个 Map 对象
List<Map<String, Object>> sortedList = list.stream()
.sorted(Comparator.comparing(map -> ((Map) map.get("yourKey")).size()))
.collect(Collectors.toList());
```
其中,`yourKey`是你要排序的Map对象的键,可以替换成你实际使用的键。这段代码使用了`Comparator.comparing`方法来对map属性的size进行排序,最终得到了按照map属性的size升序排列的集合。
相关问题
map集合怎么取value是list.size倒叙排序的前三的key
可以使用Java 8的Stream API和lambda表达式来实现。具体的代码如下:
```java
Map<String, List<Integer>> map = new HashMap<>();
// 假设map中已经有一些键值对,其中value是List<Integer>类型
List<String> topThreeKeys = map.entrySet().stream()
.sorted(Comparator.comparingInt(e -> -e.getValue().size()))
.map(Map.Entry::getKey)
.limit(3)
.collect(Collectors.toList());
```
上述代码中,我们使用`entrySet()`方法获取所有的键值对,然后使用`stream()`方法将其转换成Stream对象。接着使用`sorted()`方法将Stream中的元素按照value的List的大小从大到小排序,然后使用`map()`方法将Stream中的元素转换成key的字符串对象,使用`limit()`方法取前三个元素,最后使用`collect()`方法将其转换成List对象。这样我们就得到了value值中List大小倒序排序的前三个元素的key的List集合。
Map<String,Map<String, List<String>>> 根据value中list的size排序,若数量相同则以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,并保持插入顺序。
阅读全文