3 回答
TA贡献1869条经验 获得超4个赞
而不是mapOfMaps通过其原始类型声明它应该被定义为
Map<String, Map<String, String>> mapOfMaps = new HashMap<>();
相应的getValue方法如下所示:
public static String getValue(Map<String, Map<String, String>> mapOfMaps, String mapfind, String val) {
Map<String, String> innerMap = mapOfMaps.get(mapfind);
return innerMap != null ?
innerMap.get(val) :
null;
}
使用Optional我们可以这样写:
public static String getValue(Map<String, Map<String, String>> mapOfMaps, String mapfind, String val) {
return Optional.ofNullable(mapOfMaps.get(mapfind))
.map(m -> m.get(val))
.orElse(null);
}
如果我们继续mapOfMaps通过其原始类型声明,我们将在第一个版本中收到getValue有关未经检查的转换的类型安全警告,而在第二个版本中,我们需要将结果显式转换为String. 由于我们mapOfMaps仅用于将String键映射到String值,因此我们应该相应地声明它。
TA贡献1946条经验 获得超4个赞
我认为获得所需输出的最简单方法是使用map.get(mapfind).get(val). 但是如果您想使用现有代码实现它,您可以调用values()收集map和调用过滤器来获得二级过滤器。以下是您修改后的方法的代码片段
public static String getValue(Map<String, Map> map, String mapfind, String val) {
Map mp = map.entrySet().stream().filter(x -> x.getKey().equals(mapfind))
.collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()))
.values().stream().filter(y -> y.containsKey(val)).findAny().orElse(null);
System.out.println("--------" + mp);
if (mp == null)
return "";
return (String) mp.get(val);
}
TA贡献1797条经验 获得超6个赞
public static String getValue (Map<String, Map> map,String mapfind, String val) {
Map childMap = map.get(mapfind);
if (childMap == null) {
return null;
}
return childMap.containsKey(val) ? childMap.get(val).toString() : null;
}
添加回答
举报