开发者社区> 问答> 正文

如何在Java中的哈希映射中迭代List <Map <String,Object >>动态添加键值对

我正在尝试迭代,List<Map<String, Object>>并想检查代码是否“已批准”-如果代码的值已“批准”,那么我想在另一个hashMap 中将“ id”添加为Key,将“ date”添加为Value。

List<Map<String, Object>> prodIds = ((List<Map<String, Object>>) myIds.get("result"));

此prodIds返回以下记录集:

[{id=[14766724], Date=[1999-01-01]}, {id=[49295837], code=[approved], Date=[2003-04-01]}]

[{id=[58761474621], code=[approved], Date=[2017-09-30]}, {id=[3368781], code=[Cancelled], Date=[2014-01-01]}, {id=[48843224], code=[Cancelled], Date=[2009-01-01]}]

我想要这样的输出:如果代码被“批准”-我的新哈希映射应具有如下值:

map.put("49295837", "2003-04-01")
map.put("58761474621", "2017-09-30")


Java代码

List<Map<String, Object>> prodIds = ((List<Map<String, Object>>) myIds.get("result"));
System.out.println("prodIds : " +prodIds ); 
//  [{id=[14766724], Date=[1999-01-01]}, {id=[49295837], code=[approved], Date=[2003-04-01]}]
// [{id=[58761474621], code=[approved], Date=[2017-09-30]}, {id=[3368781], code=[Cancelled], Date=[2014-01-01]}, {id=[48843224], code=[Cancelled], Date=[2009-01-01]}]


Map<String, String> newMap = new HashMap<>();
    for (Map<String, Object> map : prodIds) { 
        for (Map.Entry<String, Object> entry : map.entrySet()) { 
            String key = entry.getKey();
            System.out.println("Key : " +key);

            String value = (String) entry.getValue();
             System.out.println(" Value : " +value);
        }
    }

如果将代码值“批准”到新的哈希图中,我将难以动态地放置键(id)和值(日期)。如果有人可以帮助我,这将真的很有帮助。

提前感谢您的帮助!

谢谢


问题来源:stackoverflow

展开
收起
七天一失眠 2020-03-21 11:09:48 1101 0
1 条回答
写回答
取消 提交回答
  • 做一个优秀的阿里云志愿者

    尽我所能确定,这应该可行。但对于每一个Map<String,Object>我需要知道什么Object是(例如String,List<>等)。

    我假设它们是列表。如果我错了,你会得到一个ClassCastException

        public static Map<String, String>
                getApproved(List<Map<String, Object>> prodIds) {
            Map<String, String> newMap = new HashMap<>();
            for (Map<String, Object> map : prodIds) {
                if (map.containsKey("code") &&
                ((List<String>) map.get("code")).get(0)
                        .equals("approved")) {
                    newMap.put(((List<String>) map.get("id")).get(0),
                            (String) ((List<String>) map.get("Date"))
                                    .get(0));
                }
            }
            return newMap;
        }
    
        Map<String, String> newMap = getApproved(prodIds);
        newMap.entrySet().forEach(System.out::println);
    

    打印:

    
    58761474621=2017-09-30
    49295837=2003-04-01
    

    答案来源:stackoverflow

    2020-03-21 11:11:49
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载