如何将两个hashmap的列表转换回Map



我只需要一些帮助就可以完成以下内容。基本上我有两个散列映射列表(body1和body2(,我需要将它们合并为一个(body(。我遇到的问题是如何做到这一点并将body转换为Map,因为我需要将body作为post请求传递,这需要Map。它必须是一个地图,因为该方法使用了内置的unirest函数:

((HttpRequestWithBody) httpRequest).fields(...);

字段必须是地图。

public class Main {
public static void main(String args[]) {
Map<String, Object> body1=Map.of("key1","value1","key2","value2","key3","value3");
Map<String, Object> body2=Map.of("key1","value1","key2","value2");
List<Map<String, Object>> body=List.of(body1,body2);
for(Map<String, Object> map:body) {
//not sure what goes here
}
}
final String url = String.format("%s/.../service/", System.getenv(ENDPOINT), service);
new DBRequest(dataStore, url, HttpMethod.POST).postRequest(body);
}
public HttpResponse postRequest(Map body) {
((HttpRequestWithBody) httpRequest).fields(body);
return sendRequest();
}

您可以在java.util.Map接口中使用merge((函数。通过这种方式,如果映射上的两个元素具有相同的键,也可以引入要应用的逻辑。

下面是我做的一个junit示例,其中在键冲突的情况下应用的逻辑是将元素字符串值与模式"value1-value2">连接,如果值不同:

@Test
public void mapMergeTest(){
Map<String, Object> body1=Map.of("key1","value1","key2","value2","key3","value3");
System.out.println("Merged body1: n"+body1);
Map<String, Object> body2=Map.of("key1","value1","key2","value2");
System.out.println("Merged body2: n"+body2);
Map<String, Object> mergedBody = new HashMap<>(body1);
body2.forEach(
(key, value) -> {
mergedBody.merge(key, value, (v1, v2) -> {
if(v1.equals(v2))
return v1.toString();
return v1.toString() + "-" + v2.toString();
});
});
System.out.println("Merged body: n"+mergedBody);
}

输出为:

Body1: 
{key1=value1, key2=value2, key3=value3}
Body2: 
{key1=value5, key2=value2}
Merged body: 
{key1=value1-value5, key2=value2, key3=value3}

因此,只需根据您的需要更改合并密钥冲突逻辑即可。

为什么需要引入一个列表?这样的东西对你有用吗?

body1.putAll(body2);

最新更新