使用stream流对 Map<String,List<SafetyQuestionVo>> list.size 进行排序
时间: 2023-11-11 18:18:42 浏览: 45
可以使用Java 8的Stream API对Map<String,List<SafetyQuestionVo>>中的List的size进行排序,代码如下:
```
Map<String, List<SafetyQuestionVo>> map = ...; // 假设已经有一个Map对象
List<Map.Entry<String, List<SafetyQuestionVo>>> sortedList = map.entrySet().stream()
.sorted(Comparator.comparingInt(entry -> entry.getValue().size()))
.collect(Collectors.toList());
// sortedList中就是按照List的size从小到大排序后的Map.Entry对象列表
```
代码解析:
- 首先调用Map的entrySet()方法,将Map转换为Set<Map.Entry>对象。
- 然后调用Stream的sorted()方法,传入一个Comparator对象,该对象根据List的size进行比较。Comparator.comparingInt()方法是Java 8新增的方法,用于返回一个基于整数的比较器,更加高效。
- 最后调用Stream的collect()方法,将排序后的Map.Entry对象收集到一个List中。在这里使用了Collectors.toList()方法,可以将Stream中的元素收集到一个List对象中。
相关问题
使用stream流对 Map<String,List<SafetyQuestionVo>> list.size 进行倒叙排序
可以使用以下代码对 `Map<String,List<SafetyQuestionVo>>` 的 `list.size()` 进行倒序排序:
```java
Map<String,List<SafetyQuestionVo>> map = ...; // 假设这是需要排序的 Map 对象
List<Map.Entry<String,List<SafetyQuestionVo>>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, (o1, o2) -> o2.getValue().size() - o1.getValue().size());
list.stream().forEach(entry -> {
System.out.println(entry.getKey() + " : " + entry.getValue().size());
});
```
这里使用了 `Collections.sort()` 方法和一个自定义的比较器(Comparator),将 Map 的 entrySet 转换成了一个 List,并按照 value 的 size 进行倒序排序。最后使用 stream 流对排序后的结果进行遍历输出。
使用stream流对 Map<String,List<Object>> list.size 进行排序
首先需要明确一点,Map<String,List<Object>> 中的value是List类型,而List是有大小的,所以不能直接使用size对Map进行排序。您可能想要对Map中value的List的大小进行排序,如果是这样的话,可以使用下面的代码:
```
Map<String, List<Object>> map = new HashMap<>();
// 添加数据到map中
List<Map.Entry<String, List<Object>>> list = new ArrayList<>(map.entrySet());
list.stream()
.sorted(Comparator.comparingInt(e -> e.getValue().size()))
.collect(Collectors.toList());
```
在上面的代码中,我们首先将Map转换为List类型,然后使用stream方法对List进行排序。Comparator.comparingInt方法用于指定排序的规则,这里是根据每个Map.Entry的value的List大小进行排序,然后使用collect方法将排序后的结果转换为List类型。
需要注意的是,这里的排序是升序排序,如果需要降序排序,可以将comparingInt改为comparingInt().reversed()。