java按属性合并列表中对象的实例
我有一个对象人,它有名字、姓氏和电子邮件
class Person {
String firstname;
String lastName;
String email;
}
我有一个Person
列表,其中可能有多个Persons
相同的firstName
和lastName
,我想通过电子邮件地址用分隔符将它们合并
即。 人A=
{
"firstName": "David",
"lastName": "Guiney",
"email": "david.guiney@gmail.com"
}
B人=
{
"firstName": "David",
"lastName": "Guiney",
"email": "guiney.david@hotmail.com"
}
我想把这些合并到
{
"firstName": "David",
"lastName": "Guiney",
"email": "david.guiney@gmail.com;guiney.david@hotmail.com"
}
以便在我的列表中创建一个唯一的实例
# 1 楼答案
首先,如果Person可以有多封电子邮件,我会在Person类中通过一个“emails”属性来存储电子邮件的集合来反映这一点
然后可以使用Java8流
}
它应该印一些像那样的东西
您还可以重新定义Person类的equals和hashcode方法,以实现如何将2个实例分组在一起
# 2 楼答案
这取决于您定义的唯一性或相等性。这可以用equals和hashCode方法表示
您可以使用java。util。流动收集器#toMap方法提供合并功能并将列表映射到映射。在merge函数中,您可以实现如何处理具有相同“键”的两个对象的逻辑
公共阶层人士 { 公众人物(stringfirstname、stringlastname、stringemail) { 这名字=名字; 这lastName=lastName; 这电子邮件=电子邮件; }
}
如果您不想在这个用例中使用equals和hashCode,那么您当然可以提供自己的getKey逻辑
# 3 楼答案
您可以逐个检查列表中的所有对象,但问题在于时间复杂性。它将采用O(n^2)格式