java - 组合两个 Java 列表中的值
问题描述
我从数据库中提取的列表:(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);
谢谢您的回答
解决方案
首先,创建一个查找表(使用 a )以根据(key)Map
查找(value):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
)。只要使用了setter,这里就不需要使用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
)。
推荐阅读
- r - R函数循环
- ruby-on-rails - 使用 Ruby-on-Rails 和 Activerecord 设置数据模型或模式关系的最佳方法
- jquery - 使用 Div 的表结构
- tensorflow - 如何在 keras 中重新排列张量的轴?
- c# - 如何将 JObject 转换为类型 T
- python - 使用 google-drive-api 的文件导出时如何设置 mimeType?
- php - (PHP 7.2) 警告:使用未定义的常量对象 - 假定为“对象”
- regex - 在 Notepad++ 上用空格分隔每一行
- class - Kotlin:有没有办法在 kotlin 中打包私有?
- jenkins - 无法在 Jenkins 中运行测试用例