使用stream流对map中的元素进行排序
时间: 2023-10-24 10:27:06 浏览: 85
可以使用Java 8中的Stream API和Comparator接口对Map中的元素进行排序。下面是一个例子:
假设有一个Map<String, Integer> map,我们要根据value对它进行排序:
```
Map<String, Integer> sortedMap = map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(oldValue, newValue) -> oldValue,
LinkedHashMap::new));
```
这里通过entrySet()方法获取Map中的键值对集合,并使用sorted()方法按照value值进行排序。最后使用collect()方法将排序后的键值对重新放入一个LinkedHashMap中,保持排序顺序。
如果要按照key进行排序,只需要将comparingByValue()方法替换成comparingByKey()即可。
相关问题
Java 使用stream流根据Map的key对map进行排序
可以使用以下代码对Map按照key进行排序:
Map<String, Integer> map = new HashMap<>();
// 添加元素到map中
Map<String, Integer> sortedMap = map.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(oldValue, newValue) -> oldValue, LinkedHashMap::new));
使用stream流对 Map<String,List<SafetyQuestionVo>> list.size 进行排序
可以使用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对象中。
阅读全文