2016-05-16 3 views
1
public List<CustomerDTO> getCustomerSalaryByDepartmentNumber(String departmentNumber) { 
    List<CustomerDTO> customers = customerService.getCustomerSalaryByDepartmentNumber(departmentNumber); 

    if (CollectionUtils.isNotEmpty(customers)) { 
     for (CustomerDTO customer : customers) { 
      customerService.updateCustomDataOne(customer); 
      customerService.updateCustomDataTwo(customer); 
     } 
    } 
    return customers; 
} 

RxJavaコードにコードの下に変換することができますメソッドの。誰かが私を正しい方向に向けることができれば助けになるでしょう。どのように我々は、私がRxJavaに新しいですし、私はRxのJavaで簡単なコードの上にリファクタリングしたいと最後に<code>Observable.just(customers);</code>を使用したくない観測 の概念を理解しようと

次のコードを見て、ご提案ください。

public Observable<Object> getCustomerSalaryByDepartmentNumber(String departmentNumber) { 

    Observable<List<CustomerDTO>> customersObservable = Observable.just(departmentNumber).map(dnum -> { 
     return customerService.getCustomerSalaryByDepartmentNumber(dnum); 
    }); 

    return customersObservable.map(customers -> { 
     return Observable.from(customers).map(customer -> { 
      return Observable.zip(
       Observable.just(customerService.updateCustomDataOne(customer)), 
       Observable.just(customerService.updateCustomDataTwo(customer)), 
       (r, u) -> { 
        customer.setCustomDataOne(r.getCustomDataOne()); 
        return customer; 
       }); 
     }); 
    }); 
    } 

答えて

1

上記の2つの方法が異なるため、これは少し混乱します。 必須のバージョンでは、updateCustomDataメソッドの戻り値を使用しておらず、setCustomDataOneメソッドを呼び出していません。

あなたが最初の方法の直接Observable変換したい場合は、どのように以下について:

public Observable<CustomerDTO> getCustomerSalaryByDepartmentNumber(String departmentNumber) { 
     return Observable.from(customerService.getCustomerSalaryByDepartmentNumber(departmentNumber)) 
       .doOnNext(customer -> { 
        customerService.updateCustomDataOne(customer); 
        customerService.updateCustomDataTwo(customer); 
       }); 
    } 

は順番にlistの各要素を放出するObservableを返しますObservable.from(List<T>)の使用を注意してください。これを行うと、空のリストがあるかどうかを確認する必要がなくなります。第二の方法に関しては

は、customersObservableオブジェクトの作成と使用は、その次に冗長置き換えることができますされています

public Observable<CustomerDTO> getCustomerSalaryByDepartmentNumber(String departmentNumber) { 
     return Observable.from(customerService.getCustomerSalaryByDepartmentNumber(departmentNumber) 
       .map(customer -> { 
        return Observable.zip(
          Observable.just(customerService.updateCustomDataOne(customer)), 
          Observable.just(customerService.updateCustomDataTwo(customer)), 
          (r, u) -> { 
           customer.setCustomDataOne(r.getCustomDataOne()); 
           return customer; 
          }); 
       }); 
} 

customerService.updateCustomDataxxxリターンが何かが無効ではないことに注意してください。 Observable.zipは、すべてのオブザーバブルが圧縮されて何かを放射するまで、ジップ機能を実行しません。これは何度も私を捕まえてしまった。

希望します。

+0

お寄せいただきありがとうございます。 – Parmod

関連する問題