簡體   English   中英

如何找到兩個集合之間的差異

[英]How to find differences between two collections

我有以下 DTO:

@Data
public class PersonDTO implements Diffable<PersonDTO> {

    private String id;
    private String firstName;
    private String lastName;
    private List<AddressDTO> addresses;

    @Override
    public DiffResult diff(PersonDTO personDTO) {
        return new DiffBuilder(this, personDTO, SHORT_PREFIX_STYLE)
                .append("id", this.id, personDTO.getId())
                .append("firstName", this.firstName, personDTO.getFirstName())
                .append("lastName", this.lastName, personDTO.getLastName())
                .append("addresses", addresses, personDTO.getAddresses())
                .build();
    }
}

@Data
public class AddressDTO implements Diffable<AddressDTO> {

    private String id;
    private String personId;
    private String addressType;
    private String street;
    private String houseNumber;
    private String postalCode;
    private String city;
    private String countryId;

    @Override
    public DiffResult diff(AddressDTO addressDTO) {
        return new DiffBuilder(this, addressDTO, SHORT_PREFIX_STYLE)
                .append("id", this.id, addressDTO.getId())
                .append("personId", this.personId, addressDTO.getPersonId())
                .append("addressType", this.addressType, addressDTO.getAddressType())
                .append("street", this.street, addressDTO.getStreet())
                .append("houseNumber", this.houseNumber, addressDTO.getHouseNumber())
                .append("postalCode", this.postalCode, addressDTO.getPostalCode())
                .append("city", this.city, addressDTO.getCity())
                .append("countryId", this.countryId, addressDTO.getCountryId())
                .build();
    }
}

我的主要目標是找出兩個相似人物對象之間的差異。 目前我已經嘗試使用來自 apache commons 的Diffable接口,這對對象來說非常好。 當每個集合的大小可能不同時,請告知如何處理集合。 例如,刪除了幾個地址,添加了幾個地址,更新了幾個地址。 請看下面的例子:

在此處輸入圖片說明

可能還有另一個圖書館可以幫助實現類似的目標,請指教

源可以是你的第一個對象

目標可以是你的第二個對象

Iterator targetIt = target.iterator();
for (Object obj:source)
  if (!obj.equals(targetIt.next())
    // Element has changed

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM