有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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"
   }
]

我想得到一对(或一系列的对),其中的名字和年龄在左手和右手是相同的,但地址是不同的。我的想法是,我有一个要删除的实体列表和一个要创建的实体列表,但是在David的情况下,我不想删除实体并创建一个新的实体,因为它有依赖关系。我只想更改他的地址

Person中没有唯一的标识符,所以我不能仅仅通过id进行比较


共 (1) 个答案

  1. # 1 楼答案

    在现实世界中,您没有足够的信息来决定记录是另一个人还是地址更改

    如果你在一个玩具环境中玩,你永远不会遇到两个名字和年龄相同的人,那么这个(名字和年龄)就是你的复合主键,你可以根据它写一个hashCode()equals()。在这种情况下,这是Java 8: check for common elements in two lists using streams的dup