在Java8中合并递归Hashmap

在Java8中合并递归Hashmap,java,dictionary,java-8,hashmap,java-stream,Java,Dictionary,Java 8,Hashmap,Java Stream,我需要合并多个HashMaps 地图1: 地图2: 预期结果 {"41666": {"oyo_id":"KSD900", "contracted_rooms":31, "status":"live" }, "41667": {"oyo_id":"JGH900", "contracted_rooms":3, "status":"live" } } 我所尝试的: 分配的属性响应: @JsonProperty("oyo_id") private String oyoId; @Js

我需要合并多个
HashMap
s

地图1:

地图2:

预期结果

{"41666":
 {"oyo_id":"KSD900",
 "contracted_rooms":31,
 "status":"live"
 },
 "41667":
 {"oyo_id":"JGH900",
 "contracted_rooms":3,
 "status":"live"
 }
}
我所尝试的:

分配的属性响应

@JsonProperty("oyo_id")
private String oyoId;

@JsonProperty("status")
private String status;

@JsonProperty("contractedRoomsCount")
private Double contracted_rooms_count;
已分配属性响应者:

HashMap<String, AssignedPropertiesResponse>

map1.putAll(map2);
HashMap
map1.putAll(map2);

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

以下是一个示例性实现:

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

注意:变量名是用camelCase在java中编写的。

创建一个合并函数

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())));
map2.merge(key, value, (v1, v2) -> new AssignedPropertiesResponse(v1.getOyoId(),v1.getStatus(),v2.getContractedRoomsCount())
map2.forEach(
  (key, value) -> map1.merge(key, value, (v1, v2) -> new AssignedPropertiesResponse(v1.getOyoId(),v1.getStatus(),v2.getContractedRoomsCount())));