java - 在数组对象的情况下如何读取特定的映射键值
问题描述
我有以下地图结构
{empId=1234, empName=Mike, CDetails=[{"collegeName":"Peters Stanford","collegeLoc":"UK","collegeLoc":"UK"}]}
我需要从上面的 Map中读取值collegeLoc
我试过这种方式,它的工作,但有没有更好的方法
myMap.entrySet().stream().filter(map -> map.getKey().equals("CDetails")).forEach(e -> {
List<Object> objsList = (List<Object>) e.getValue();
for(int i=0;i<objsList.size();i++)
{
HashMap<String,String> ltr = (HashMap<String, String>) objsList.get(i);
System.out.println(ltr.get("collegeLoc"));
}
});
解决方案
CDetails
是一个List
,不是一个Map
。
尝试这个:
empMap.entrySet().stream()
.map(map -> map.get("CDetails"))
.filter(Objects::nonNull)
.flatMap(List::stream)
.map(element -> ((Map)element).get("collegeLoc"))
.filter(Objects::nonNull)
.forEach(System.out::println);
推荐阅读
- azure - 如何在 App 洞察力上创建 Azure Kusto 查询以仅按客户端操作系统名称(已删除操作系统版本)分组?
- php - 如何隐藏选择选项值并用新值替换 2 个选项?
- git - 如何从存储库中已有的特定 TAG 更改文件?
- java - 无法解决类异常:com.blazemeter.jmeter.RandomCSVDataSetConfig
- azure - DATABRICKS 数据库文件系统
- jquery - 有没有办法使用汇总在 ES6 和 UMD 中编写 jQuery 插件
- python - Anaconda:安装 mgwr 时出现 UnsatisfiableError
- angularjs - 如何使用 angularJS ui-mask 强制 2 或 3 个字符或数字
- c# - xslt 到多个输出
- angular - 通过在组件的 css 中导入加载 css 和脚本与在索引中链接它