在两个列表中找到相似但不相等的实体(Java)

时间:2020-09-01 20:42:54

标签: java collections java-stream

假设我有一个这样的“人”类:

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进行比较。

1 个答案:

答案 0 :(得分:0)

在现实世界中,您没有足够的信息来确定记录是其他人还是仅仅是地址更改。

如果您在玩具环境中玩耍,那么您永远不会遇到两个具有相同名称和年龄的人,那么THAT(名称和年龄)是您的复合主键,您可以编写hashCode()和{{ 1}}基于此。在这种情况下,这是Java 8: check for common elements in two lists using streams

的重复项