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

huangapple go评论84阅读模式
英文:

Finding similar but not equal entities across two lists (Java)

问题

假设我有一个类叫做“Person”,像这样:

  1. public class Person {
  2. String name;
  3. int age;
  4. String address;
  5. // 获取器和设置器等。
  6. }

我有两个“Person”的列表:一个用于创建,另一个用于删除。

删除列表 =

  1. [
  2. {
  3. "name": "David",
  4. "age": 30,
  5. "address": "10 Main St."
  6. },
  7. {
  8. "name": "Mary",
  9. "age": 31,
  10. "address": "8 Main St."
  11. },
  12. {
  13. "name": "John",
  14. "age": 40,
  15. "address": "9 Side St."
  16. }
  17. ]

创建列表 =

  1. [
  2. {
  3. "name": "David",
  4. "age": 30,
  5. "address": "50 Fleet St."
  6. },
  7. {
  8. "name": "Oliver",
  9. "age": 31,
  10. "address": "40 10th St."
  11. },
  12. {
  13. "name": "Jane",
  14. "age": 40,
  15. "address": "1 Broadway"
  16. }
  17. ]

我想要获取一对(或一组对),其中左右两边的名称和年龄相同,但地址不同。我的想法是,我有一个要删除的实体列表和一个要创建的实体列表,但是在“David”的情况下,我不想删除该实体并创建一个新实体,因为它有依赖项。我只想更改他的地址。

在“Person”中没有唯一的标识符,因此我不能只通过ID进行比较。

英文:

Let's say I have a class 'Person' like this:

  1. public class Person {
  2. String name;
  3. int age;
  4. String address;
  5. // Getters and Setters etc.
  6. }

And I have two lists of 'Person': a list to create and a list to delete.

Delete List =

  1. [
  2. {
  3. "name: "David"
  4. "age": 30,
  5. "address": "10 Main St."
  6. },
  7. {
  8. "name: "Mary"
  9. "age": 31,
  10. "address": "8 Main St."
  11. },
  12. {
  13. "name: "John"
  14. "age": 40,
  15. "address": "9 Side St."
  16. }
  17. ]

Create List =

  1. [
  2. {
  3. "name: "David"
  4. "age": 30,
  5. "address": "50 Fleet St."
  6. },
  7. {
  8. "name: "Oliver"
  9. "age": 31,
  10. "address": "40 10th St."
  11. },
  12. {
  13. "name: "Jane"
  14. "age": 40,
  15. "address": "1 Broadway"
  16. }
  17. ]

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

huangapple
  • 本文由 发表于 2020年9月2日 04:42:54
  • 转载请务必保留本文链接:https://go.coder-hub.com/63695182.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定