2017-05-18 67 views
-1

我有兩個列表。以優化方式合併兩個列表

List<Customer> customers1 = getCustomerDetails1(); 
List<Customer> customers2 = getCustomerDetails2(); 

public class Customer { 
    private String firstName; 
    private String lastName; 
    private String gender; 
    private String birthDate; 
    private String formatedDob; 
    private String mobileNumber; 
    private String oldMobileNumber; 
    private String emailId; 
    private String add1; 
    private String add2; 
    private String add3; 
    private String pincode; 
    private String city; 
    private String cityId; 

    ---- 
    getter, setter 

我現在都合併列表數據如下:

List<Customer> customerVoList = new ArrayList<>(); 

for (Customer localCustomerVO : customers1) { 
    for (Customer customerHubVO : customers2) { 
     localCustomerVO = fillCustomerDetails(localCustomerVO, customerHubVO); 
     customerVoList.add(localCustomerVO); 
    } 
} 

private Customer fillCustomerDetails(Customer localCustomerVO, Customer customerHuvVO) { 
     localCustomerVO.setFirstName(StringUtils.isEmpty(customerHuvVO.getFirstName()) ? localCustomerVO.getFirstName() : customerHuvVO.getFirstName()); 
     localCustomerVO.setLastName(StringUtils.isEmpty(customerHuvVO.getLastName()) ? localCustomerVO.getLastName() : customerHuvVO.getLastName()); 
     localCustomerVO.setEmailId(StringUtils.isEmpty(customerHuvVO.getEmailId()) ? localCustomerVO.getEmailId() : customerHuvVO.getEmailId()); 
     localCustomerVO.setBirthDate(StringUtils.isEmpty(customerHuvVO.getBirthDate()) ? localCustomerVO.getBirthDate() : customerHuvVO.getBirthDate()); 
     localCustomerVO.setFormatedDob(customerHuvVO.getBirthDate() != null ? DateUtils.getDateddMMYYYY(customerHuvVO.getBirthDate()) : (localCustomerVO.getBirthDate() != null ? DateUtils.getDateddMMYYYY(localCustomerVO.getBirthDate()) : "")); 

     localCustomerVO.setAdd1(StringUtils.isEmpty(customerHuvVO.getAdd1()) ? localCustomerVO.getAdd1() : customerHuvVO.getAdd1()); 
     localCustomerVO.setAdd2(StringUtils.isEmpty(customerHuvVO.getAdd2()) ? localCustomerVO.getAdd2() : customerHuvVO.getAdd2()); 
     localCustomerVO.setAdd3(StringUtils.isEmpty(customerHuvVO.getAdd3()) ? localCustomerVO.getAdd3() : customerHuvVO.getAdd3()); 
     localCustomerVO.setCity(StringUtils.isEmpty(customerHuvVO.getCity()) ? localCustomerVO.getCity() : customerHuvVO.getCity()); 
     localCustomerVO.setState(StringUtils.isEmpty(customerHuvVO.getState()) ? localCustomerVO.getState() : customerHuvVO.getState()); 
     localCustomerVO.setPincode(StringUtils.isEmpty(customerHuvVO.getPincode()) ? localCustomerVO.getPincode() : customerHuvVO.getPincode()); 

     return localCustomerVO; 
} 

上面的代碼工作正常。但我正在尋找其他最好的方法。

+0

這看起來不對。您不應該將第一個列表中的一個客戶與第二個列表中的一個相應客戶合併嗎? – Eran

+0

什麼是'CustomerVO'? –

+1

@Eran這只是一個非常簡單的方法來增加您的收入。你之前有'N'客戶,現在你有'N^2'客戶:D –

回答

0

如果你確實想簡單地與記錄#0的customers2customers1與記錄#customers2 1的等記錄#1匹配記錄#0的customers1,做這樣的事情:

Iterator<Customer> iter1 = customers1.iterator(); 
Iterator<Customer> iter2 = customers2.iterator(); 
while (iter1.hasNext() && iter2.hasNext()) { 
    Customer cust1 = iter1.next(); 
    Customer cust2 = iter2.next(); 
    customerVoList.add(localCustomerVO); 
} 

我想請你考慮一下這種可能性,這可能不是你想到的,但如果是這樣,那基本上就是你怎麼做的。

0

您檢查customerHuvVO屬性是否爲空,如果是,則將localCustomerVO的屬性值設置爲不必要的相同值。

因此,而不是寫:

localCustomerVO.setFirstName(StringUtils.isEmpty(customerHuvVO.getFirstName()) ? localCustomerVO.getFirstName() : customerHuvVO.getFirstName());

你可以寫:

if (!StringUtils.isEmpty(customerHuvVO.getFirstName())) localCustomerVO.setFirstName(customerHuvVO.getFirstName());

,因此消除不必要的更新。

而且你還應該檢查你的邏輯是@Eran指出的。