簡體   English   中英

在 Java 8 中合並遞歸 Hashmap

[英]Merging recusrive Hashmap in java 8

我需要合並多個HashMap s

地圖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;

分配的屬性響應列表:

HashMap<String, AssignedPropertiesResponse>

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

PS:變量名在java中是用camelCase寫的。

創建合並函數

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM