我通过数据库提取的列表:(list1)
[
{
"id": 123,
"code": null,
"subCode": null,
"email": "test@gmail.com"
},
{
"id": 124,
"code": null,
"subCode": null,
"email": "test2@gmail.com"
}
...
]
我从请求中得到的列表:(响应)
{
"code": "4d2042b5",
"result": [
{
"subCode": "d2042d2042",
"email": "test@gmail.com"
},
{
"subCode": "er3442rer",
"email": "test2@gmail.com"
}
...
]
}
(对不起,我的英语)
我必须将第一个列表与第二个列表结合起来,编辑和更新数据库。
我要获取的列表:
[
{
"id": 123,
"code": "4d2042b5",
"subCode": "d2042d2042",
"email": "test@gmail.com"
},
{
"id": 124,
"code": "4d2042b5",
"subCode": "er3442rer",
"email": "test2@gmail.com"
}
...
]
我如何创建此列表?
我尝试过的方法:
list1.stream().filter(one -> response.result.stream()
.anyMatch(two -> two.getEmail().equals(one.getEmail())))
.findAny().ifPresent(x-> {
x.setCode(response.getCode());
x.setsubCode(two.getSubCode);
谢谢您的回答
答案 0 :(得分:0)
首先,创建一个查询表(使用Map
),以根据subCode
(键)查找email
(值):
Map<String, String> responseMap = response.getResult()
.stream()
.collect(Collectors.toMap(obj -> obj.getEmail(), obj -> obj.getSubCode()));
{test@gmail.com=d2042d2042,test2@gmail.com=er3442rer}
现在,您已经准备就绪,可以从数据库中完成对象(我们将其称为MyObject
)。只要使用了设置器,就不需要使用java-stream:
final String code = response.getCode();
list1.forEach(myObject -> {
final String subCode = responseMap.get(myObject.getEmail());
myObject.setCode(response.getCode());
myObject.setSubCode(subCode);
});
请注意,此解决方案假定可以在响应中找到来自MyObject
的每封电子邮件(来自obj
的“ response.getResult
”集合)。