java - Java 8 流映射> 如果根映射键包含返回映射值
问题描述
我有一张地图:
Map<String, Map<String, Integer>> rootMap
Map<String, Integer>
如果rootMap
键包含stringValue
使用流,我想返回 rootMap 值。
我试过了:
rootMap.entrySet().stream().filter(e -> e.getKey().contains(stringValue)).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
但我得到Map<Object, Object>
而不是Map<String, Integer>
更新#1
// it's a class with one field and a helper method
// @Data is a Lombok annotation
@Data
public class A {
public Map<String, Map<String, Integer>> rootMap;
public Map<String, Integer> getValuesByKey(String stringValue) {
return rootMap.entrySet().stream().filter(e -> e.getKey().contains(stringValue)).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}
}
解决方案
这是你的表达:
rootMap.entrySet()
.stream()
.filter(e -> e.getKey().contains(stringValue))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
这是你的目标:
如果 rootMap 键包含使用流的 stringValue,我想返回 rootMap 值 Map<String, Integer>。
回想一下,映射键必须是唯一的。您不能拥有多个Map.Entry
具有相同密钥的相同实例。因此,您可以获取Map<String, Integer>
对应的key,rootMap
其值stringValue
如下:
rootMap.entrySet()
.stream()
.filter(e -> e.getKey().equals(stringValue))
.map(e -> e.getValue())
.findAny()
.get();
要在密钥不存在的情况下防止错误,rootMap
您可以使用此版本:
rootMap.entrySet()
.stream()
.filter(e -> e.getKey().equals(stringValue))
.map(e -> e.getValue())
.findAny()
.orElse(Collections.emptyMap());
推荐阅读
- qt - TableView 中的 QML 和组合框
- c++ - 如何更改 Gurobi C++ 模型中的目标值系数
- swift - 无法读取`childChanged`
- javascript - 如何解决 Heroku 错误:找不到模块“puppeteer-cluster”?
- node.js - NodeJs 意外崩溃问题——如何处理
- java - ListView 不在下一个位置保存项目,不断更换
- python - 检索同义词和相似性
- python - Pyinstaller Tensorflow 捆绑包失败
- react-native - 使用 RN 0.61.x,React Native GIFs 动画的运行速度突然比预期快
- c# - 如何遍历 uwp 页面中的每个元素?