java中可通过entryset().stream()将map转为stream进行操作,再用filter过滤、collect收集;需注意key重复时提供合并函数,null值需预先过滤。

Java 中可以通过 Stream API 对 Map 进行遍历、过滤和收集,核心是把 Map 转成 Stream(比如用 entrySet().stream()),再用 filter 和 collect 完成操作。
用 entrySet() 获取键值对流
Map 本身没有直接的 stream() 方法,但它的 entrySet() 返回一个 Set
- 每个元素是
Map.Entry类型,可用getKey()和getValue()访问 - 适合按键、按值或按键值组合条件过滤
按值过滤并收集为新 Map
例如:保留所有 value 大于 10 的键值对,并转回 Map:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
Map<string integer> original = Map.of("a", 5, "b", 15, "c", 20);
Map<string integer> filtered = original.entrySet().stream()
.filter(entry -> entry.getValue() > 10)
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue
));</string></string>
注意:Collectors.toMap() 要求 key 不重复,否则会抛 IllegalStateException;如有重复 key 需提供合并函数,如 (v1, v2) -> v1。
按键过滤或组合条件
也可以用键做判断,或者同时检查键和值:
- 只保留键以 "user_" 开头的项:
filter(e -> e.getKey().startsWith("user_")) - 键含 "temp" 且值为 null:
filter(e -> e.getKey().contains("temp") && e.getValue() == null) - 想收集为 List
而不是 Map,直接用 collect(Collectors.toList())
避免修改原 Map,注意空值处理
Stream 操作是无副作用的,不会影响原 Map。但要注意:
- 如果 Map 含 null 值或 null 键,
toMap()默认不支持 null key/value(除非用HashMap::new作 supplier 并配合允许 null 的 collector) - 更安全的做法是先 filter 掉 null:
filter(e -> e.getValue() != null && e.getKey() != null) - 若只需部分字段(如只取 value),可用
map(Map.Entry::getValue).collect(Collectors.toList())
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










