有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何从java中的映射值列表中获取值,并在不存在时进行处理

我想迭代地图列表,检查代码是否为“已批准”,然后将“id”和“日期”添加到另一个地图中。我有一个场景代码不会作为地图列表的一部分出现(例如,记录1-我只有第二个元素的代码,我只有id日期在我的第一个元素中,as记录-2在所有元素中都有“代码”)

这是我的密码

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

//这个prodIds在我的java代码中返回如下:

记录1:

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

记录2:

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

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]}]

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”键和“Date”值,我想为代码值“approved”添加“id”和“Date”键

怎么做


共 (2) 个答案

  1. # 1 楼答案

    您只需要一个简单的空检查

    for (Map<String, Object> s : prodIds) { 
    
       List<String> status = (List<String>) s.get("code");
    
          if(status!=null && !status.isEmpty()) {
    
             System.out.println("status value: " +status.get(0));
          }else {
            //some default value or do something 
    
           }
    
     }
    
  2. # 2 楼答案

    这将查找所有已批准的项目并输出日期(假设代码值为字符串):

    prodIds.stream()
            .filter(m -> m.get("code") != null && m.get("code").equals("approved"))
            .map(m -> m.get("Date"))
            .forEach(System.out::println);