英文:
Finding similar but not equal entities across two lists (Java)
问题
假设我有一个类叫做“Person”,像这样:
public class Person {
   String name;
   int age;
   String address;
   // 获取器和设置器等。
}
我有两个“Person”的列表:一个用于创建,另一个用于删除。
删除列表 =
[
   {
       "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进行比较。
英文:
Let's say I have a class 'Person' like this:
public class Person {
   String name;
   int age;
   String address;
   // Getters and Setters etc.
}
And I have two lists of 'Person': a list to create and a list to delete.
Delete List =
[
   {
       "name: "David"
       "age": 30,
       "address": "10 Main St."
   },
   {
       "name: "Mary"
       "age": 31,
       "address": "8 Main St."
   },
   {
       "name: "John"
       "age": 40,
       "address": "9 Side St."
   }
]
Create List =
[
   {
       "name: "David"
       "age": 30,
       "address": "50 Fleet St."
   },
   {
       "name: "Oliver"
       "age": 31,
       "address": "40 10th St."
   },
   {
       "name: "Jane"
       "age": 40,
       "address": "1 Broadway"
   }
]
I want to get a pair (or list of pairs) where the name and age are the same in the LHS and RHS but the address is different. The idea is that I have a list of entities to delete and list of entities to create, but in the case of David, I don't want to delete the entity and create a new one, because there are dependencies on it. I just want to change his address.
There are no unique identifiers in Person so I cannot just do a comparison by id.
答案1
得分: 1
在现实世界中,您没有足够的信息来判断一条记录是不是不同的人,还是只是一个地址变更。
如果您在一个玩具环境中进行游戏,在这种环境中,您永远不会遇到具有相同姓名和年龄的两个人,那么姓名和年龄就是您的复合主键,您可以基于此编写 hashCode() 和 equals()。在这种情况下,这与 Java 8:使用流检查两个列表中的公共元素 是重复的。
英文:
In the real world, you don't have enough information to decide if a record is a different person or just an address change.
If you are playing in a toy environment where you will never encounter two people with the same name and age, then THAT (name & age) is your composite primary key and you can write a hashCode() and equals() based on that.  In which case this is a dup of Java 8: check for common elements in two lists using streams
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论