Java 合并两个不同类型对象的列表

Java 合并两个不同类型对象的列表,java,algorithm,merge,Java,Algorithm,Merge,我有两个不同类型对象的列表,它们共享一些属性。让我们假设List usersDb和List usersLdap。 它们共享一个属性-userId。我想将usersDb和usersLdap合并到另一类型对象的一个列表中(使用一个列表中的一些数据和第二个列表中的一些数据)。重要的是,列表可能有不同的大小。然后,这些数据也应该在最终的列表中,但是列表中没有出现的字段应该重新标记为空。首先,将列表中的一个(比方说列表)转换成由用户ID索引的映射(我假设它是字符串)将提高性能 现在,您可以迭代另一个列表,

我有两个不同类型对象的列表,它们共享一些属性。让我们假设List usersDb和List usersLdap。
它们共享一个属性-userId。我想将usersDb和usersLdap合并到另一类型对象的一个列表中(使用一个列表中的一些数据和第二个列表中的一些数据)。重要的是,列表可能有不同的大小。然后,这些数据也应该在最终的列表中,但是列表中没有出现的字段应该重新标记为空。

首先,将
列表
中的一个(比方说
列表
)转换成由用户ID索引的
映射(我假设它是
字符串
)将提高性能

现在,您可以迭代另一个
列表
,并针对每个元素,搜索
映射
是否包含匹配的元素。使用这些元素创建合并类型的实例,并将其添加到输出
列表中


最后,您必须在转换为
映射的
列表
中搜索其他
列表
中没有相应元素的元素,将它们转换为合并类型,并添加到输出
列表
。为了使最后一步更有效,可能需要创建一个
集合
,该集合包含其他
列表中的所有用户ID

可能看起来像这样(按用户id映射列表,获取所有用户id,或获取用户id的交点,然后检查所有用户id,获取每个映射中的匹配值,创建第三种类型):

列表列表a=。。。;
列表b=。。。;
Map a=listA.stream().collect(toMap(UserDb::getUserId,Function.identity());
Map b=listB.stream().collect(toMap(UserLdap::getUserId,Function.identity());
Set allIds=new HashSet();
addAll(a.keySet());
allIds.addAll(b.keySet());//如果希望使用交集而不是并集,则可以使用retainAll
List=allIds.stream().map(id->{
UserDb UserDb=a.get(id);
UserLdap UserLdap=b.get(id);
FinalType t=//从另外两个生成此文件。请注意其中一个可以为null
返回t;
}).collect(toList());

首先,我将通过common userId属性将每个列表转换为一个映射。然后检查所有ID并为最终列表生成对象。您是否尝试过一些代码?请共享它。@Lino哦,很抱歉。复制粘贴错误。谢谢!