如何比较两个objetcs列表对象字段的差异?

时间:2016-08-29 10:24:17

标签: java collections

Collegues,我有两个不同对象的列表。

List<SharesEntity> MainSystemSecurities; List<SecureEntity> SupportSystemSecurities;

对象SharesEntitySecureEntity有一个相同的错误ISIN。 在某些情况下,ISIN在theese集合的对象中是相同的,但在某些情况下,SupportSystemSecuritiesMainSystemSecurities集合的对象中存在不同的ISIN。

我需要了解SupportSystemSecurities列表中缺少哪些对象(最好告诉ISIN)MainSystemSecurities

怎么做?比较两个集合(比较集合对象的文件)的更好方法是什么?

2 个答案:

答案 0 :(得分:2)

从第一个列表中构建Map<IsinType, SharesEntity>

Map<IsinType, SharesEntity> sharesEntityMap =
    MainSystemSecurities.stream().collect(
        Collectors.toMap(SharesEntity::getIsin,
                         Functions.identity()));

然后你可以迭代另一个列表,从这个地图的第一个列表中查找实体:

for (SecureEntity secureEntity : SupportSystemSecurities) {
  SharesEntity correspondingSharesEntity = sharesEntityMap.get(secureEntity.getIsin());
  // ...
}

这假设第一个列表中每个ISIN都有一个项目。如果情况并非如此,您可以改为构建Map<IsinType, List<SharesEntity>>,然后进行类似操作(或使用Multimap)。

答案 1 :(得分:1)

以最简单的方式,您可以使用循环和if语句来比较两个列表中的每个对象,然后将不同的对象存储在新列表中。你的if语句就像

If (MainSystemSecurities [i].ISIN == SupportSystemSecurities [j].ISIN){
List1.add (MainSystemSecurities [i]);
List2.add (SupportSystemSecurities [j]);
}