【问题标题】:Merging recusrive Hashmap in java 8在java 8中合并递归Hashmap
【发布时间】:2020-03-13 07:05:10
【问题描述】:

我需要合并多个HashMaps

地图1:

{"41666":
 {"oyo_id":"KSD900",
 "contracted_rooms":null,
 "status":"live"
 },
 "41667":
 {"oyo_id":"JGH900",
 "contracted_rooms":null,
 "status":"live"
 }
}

地图2:

{"41666":
 {"oyo_id":null,
 "contracted_rooms":31,
 "status":null
 },
 "41667":
 {"oyo_id":null,
 "contracted_rooms":3,
 "status":null
 }
}

预期结果

{"41666":
 {"oyo_id":"KSD900",
 "contracted_rooms":31,
 "status":"live"
 },
 "41667":
 {"oyo_id":"JGH900",
 "contracted_rooms":3,
 "status":"live"
 }
}

我尝试过的:

AssignedPropertiesResponse:

@JsonProperty("oyo_id")
private String oyoId;

@JsonProperty("status")
private String status;

@JsonProperty("contractedRoomsCount")
private Double contracted_rooms_count;

AssignedPropertiesResponseList:

HashMap<String, AssignedPropertiesResponse>

map1.putAll(map2);

但这是将 map2 的值覆盖到 map2 中。

【问题讨论】:

    标签: java dictionary java-8 hashmap java-stream


    【解决方案1】:

    这是一个示例性实现:

    map2.forEach((key, value) -> {
        AssignedPropertiesResponse r = map1.get(key);
        if(r != null) r.setContracted_rooms_count(value.getContracted_rooms_count());
    });
    

    P.S.:变量名在java中是用camelCase写的。

    【讨论】:

      【解决方案2】:

      创建合并函数

      map2.merge(key, value, (v1, v2) -> new AssignedPropertiesResponse(v1.getOyoId(),v1.getStatus(),v2.getContractedRoomsCount())
      

      然后您可以遍历 map2 并将条目合并到 map1 中

      map2.forEach(
        (key, value) -> map1.merge(key, value, (v1, v2) -> new AssignedPropertiesResponse(v1.getOyoId(),v1.getStatus(),v2.getContractedRoomsCount())));
      

      【讨论】:

        猜你喜欢
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-26
        • 2015-03-02
        • 2012-05-30
        • 2016-08-27
        • 1970-01-01
        相关资源
        最近更新 更多