2017-05-18 8 views
-1

私は2つのリストを持っています。 最適な方法で2つのリストをマージする

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

これは間違っています。最初のリストの顧客と2番目のリストの顧客を正確にマージしてはいけませんか? – Eran

+0

「CustomerVO」とは何ですか? –

+1

@Earn収益を増やすのは簡単な方法です。あなたは前に 'N'の顧客を持っていましたが、代わりに' N^2'の顧客を持っています:D –

答えて

0

あなたは、単にcustomers2のレコード#0でcustomers1のレコード#0を一致させたい確か場合などcustomers2のレコード#1、とcustomers1のレコード#1、このような何か:

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のプロパティの値を不要な値に設定します。だからではなく、書き込みの

は:

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

をし、不必要な更新をなくす:

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

次のように書くことができます。

また、@Eranが指摘しているロジックを確認する必要があります。

関連する問題