英文:
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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论