Couchbase Java クライアント 2.2.2 と Rx Observables 1.0.15 を使用して次の操作を行う際に問題が発生しています。
- ドキュメント名である文字列のリストがあります
- ドキュメント名の各元のドキュメントとともに、(元のドキュメント名から推測される) 別のドキュメントをロードしたいので、ドキュメントのペアを取得します。これら 2 つのドキュメントのいずれかが存在しない場合は、このペアを使用しないでください。
- ペアが有効な場合 (つまり、両方のドキュメントが存在する場合)、両方のドキュメントを使用してそれらからカスタム オブジェクトを作成します。
- それらの変換されたアイテムをリストに結合します
私がこれまでに思いついたことは、本当に意味があるように見えます:
List<E> resultList = new ArrayList<>();
Observable
.from(originalDocumentNames)
.flatmap(key -> {
Observable firstDocument = bucket.async().get(key);
Observable secondDocument = bucket.async().get(getSecondKeyNameFrom(key));
return Observable.merge(firstDocument, secondDocument);
})
.reduce((jsonDocument1, jsonDocument2) -> {
if (jsonDocument1 == null || jsonDocument2 == null) {
return null;
}
resultList.add(createCustomObject(jsonDocument1, jsonDocument2);
return null;
})
.filter(Objects.nonNull)
.singleOrDefault(null)
.subscribe(new Subscriber<E>() {
public void onComplete() {
//use resultList in a callback function
}
});
これは動作しません。Observable.merge
どこかわかりませんが、間違った使い方をしていると思います。また、問題全体に間違った方法でアプローチしていると思います。
したがって、主な質問は次のようになります。
- Observable ストリームに追加のアイテムを発行するにはどうすればよいですか?
- 2 つのアイテムを別のタイプのアイテムに減らすにはどうすればよいですか? (reduce(T, T, T) はそれを許可しません)
- 私はそれを間違って取っていますか?