map利用stream根据key排序
时间: 2023-11-17 14:17:54 浏览: 120
java8 stream 操作map根据key或者value排序的实现
可以使用`SortedMap`来实现根据key排序的功能。`SortedMap`是`Map`的一个子接口,它提供了按照key的自然顺序或自定义顺序进行排序的功能。
在Java 8及以上版本中,可以使用Stream API结合`SortedMap`来实现按照key排序的操作。下面是一个示例代码:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
// 创建一个普通的Map对象
Map<String, Integer> map = new HashMap<>();
map.put("c", 3);
map.put("a", 1);
map.put("b", 2);
// 使用Stream API对Map按照key进行排序
SortedMap<String, Integer> sortedMap = map.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.collect(
TreeMap::new,
(m, e) -> m.put(e.getKey(), e.getValue()),
Map::putAll
);
// 打印排序后的Map
sortedMap.forEach((key, value) -> System.out.println(key + ":" + value));
}
}
```
输出结果会按照key的顺序进行排序:
```
a:1
b:2
c:3
```
在上述代码中,我们使用`stream()`方法将Map转换为Stream流,然后使用`sorted()`方法按照key进行排序。最后,我们将排序后的结果收集到一个新的`SortedMap`对象中。
需要注意的是,`SortedMap`会根据key的自然顺序进行排序。如果你想根据自定义的顺序进行排序,可以使用`Comparator`来进行比较。例如,如果你想按照key的长度进行排序,可以使用以下代码:
```java
SortedMap<String, Integer> sortedMap = map.entrySet()
.stream()
.sorted(Comparator.comparingInt(e -> e.getKey().length()))
.collect(
TreeMap::new,
(m, e) -> m.put(e.getKey(), e.getValue()),
Map::putAll
);
```
这样就可以按照key的长度进行排序了。
阅读全文