【发布时间】:2020-09-01 20:42:54
【问题描述】:
假设我有一个像这样的“人”类:
public class Person {
String name;
int age;
String address;
// Getters and Setters etc.
}
我有两个“人员”列表:一个要创建的列表和一个要删除的列表。
删除列表 =
[
{
"name: "David"
"age": 30,
"address": "10 Main St."
},
{
"name: "Mary"
"age": 31,
"address": "8 Main St."
},
{
"name: "John"
"age": 40,
"address": "9 Side St."
}
]
创建列表 =
[
{
"name: "David"
"age": 30,
"address": "50 Fleet St."
},
{
"name: "Oliver"
"age": 31,
"address": "40 10th St."
},
{
"name: "Jane"
"age": 40,
"address": "1 Broadway"
}
]
我想获得一对(或一对列表),其中 LHS 和 RHS 中的名称和年龄相同,但地址不同。这个想法是我有一个要删除的实体列表和要创建的实体列表,但在David 的情况下,我不想删除实体并创建一个新实体,因为它存在依赖关系。我只是想改变他的地址。
Person 中没有唯一标识符,所以我不能只通过 id 进行比较。
【问题讨论】:
-
有大卫刚刚换了地址吗?或者有有两个大卫吗? 你如何区分?
-
如果您没有每个人的唯一标识符(如 ID),您将无法知道它们是相同的 - 假设您获得的列表是 JSON 格式而不是已经存在的,这是正确的将每个加载到
person类中。 -
这能回答你的问题吗? Java 8: check for common elements in two lists using streams。投票最多的答案的第二种方法使用比较器,这是您想要使用的 - 使用姓名和年龄。
-
@JonnyHenly 我想得到一对(或一对列表),其中 LHS 和 RHS 中的名称和年龄相同,但地址不同。这个想法是我有一个要删除的实体列表和要创建的实体列表,但在
David的情况下,我不想删除实体并创建一个新实体,因为它存在依赖关系。我只是想改变他的地址。 -
@ShimonCohen 这就是问题所在,我没有此类的标识符。另外,请忽略我的问题中的列表以 json 表示。我只是认为这将是表示数据的最简单方法。我这里只处理 Java 对象。
标签: java collections java-stream