【问题标题】:How to iterate List<Map<String, Object>> and add the key and value dynamically in another hash map in java如何迭代 List<Map<String, Object>> 并在 java 中的另一个哈希映射中动态添加键和值
【发布时间】:2020-03-21 00:14:58
【问题描述】:

我正在尝试迭代 List&lt;Map&lt;String, Object&gt;&gt; 并想检查 code 是否“已批准” - 如果 code 具有价值 ”批准” 那么我想添加 "id" 作为 Key"date" 作为 Value > 在另一个 hashMap 中。

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);
        }
    }

如果代码值被“批准”到新的哈希映射中,我很难将 key(id) 和 value(Date) 动态地放入。如果有人可以帮助我,那将非常有帮助。

提前感谢您的帮助!

谢谢

【问题讨论】:

    标签: java list arraylist hashmap


    【解决方案1】:

    尽我所能通过您的示例确定,这应该可行。但对于每个Map&lt;String,Object&gt;,我需要知道Object 是什么(例如StringList&lt;&gt; 等)。

    我假设它们是列表。如果我错了,你会得到一个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
    

    如果你能描述你所有的数据结构,那将会很有帮助。比如Object 类型的地图是什么?

    【讨论】:

    • 嗨 - 这对 rite entry.getKey("code") 不起作用?因为我使用了 map.entrySet())
    • 看看我更新的答案。我认为这会奏效。但是为什么在你的约会周围有 [ ] 呢?那是一个项目的列表。代码值也是如此。我需要知道你们每个人的地图在结构上是什么样子的。
    • 感谢您的回复。但是 Map 将不起作用,因为我的实际结构是 Map 打印这个 - [{id=[14766724], Date=[1999-01-01]}, {id=[49295837] , 代码=[批准], 日期=[2003-04-01]}]
    • 对象的类型是什么?仅将其称为 Object 是不够的。它是一个列表,还是什么?如果是这样 List list 其他东西的列表。具体点!
    • 它的列表
    猜你喜欢
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    相关资源
    最近更新 更多