我有這個代碼? ? public Stream<PaymentEntity> getPayments(List<String> paymentIds) {? ? ? ? return paymentIds.stream()? ? ? ? ? ? ? ? .flatMap(id -> paymentsRepository.getById(id))}paymentsRepository.getById(id)正在返回Single<PaymentEntity>但我遇到編譯時錯誤不存在類型變量 R 的實例,因此 Single 符合 Stream
3 回答

拉莫斯之舞
TA貢獻1820條經驗 獲得超10個贊
您可以使用
return paymentIds.stream() .map(id -> paymentsRepository.getById(id).toBlocking().value());
或者rxjava 2
您可以使用:
return paymentIds.stream() .map(id -> paymentsRepository.getById(id).blockingGet());
評論后我認為你可以采用這個解決方案:
List<PaymentEntity> result = new ArrayList<>(); paymentIds.forEach(id -> paymentsRepository.getById(id).toObservable().subscribe(result::add)); return result.stream();

智慧大石
TA貢獻1946條經驗 獲得超3個贊
替代解決方案:
public Stream<PaymentEntity> getPayments(List<String> paymentIds) { return Observable.fromIterable(paymentIds) .flatMapSingle(id -> paymentsRepository.getById(id)) .toList() .blockingGet() .stream(); }

慕少森
TA貢獻2019條經驗 獲得超9個贊
您可以等待,直到Single
lambda 中的當前信號發出成功值,使用.blockingGet()
:
return paymentIds.stream() .map(id -> paymentsRepository.getById(id).blockingGet());
或者您可以等待,直到所有反應鏈都以這種方式發出成功值:
return Observable.fromIterable(paymentIds) .flatMapSingle(paymentsRepository::getById) .toList() .blockingGet() .stream();
還可以考慮使用Flowable
:與 不同的是Observable
,它支持背壓策略。
添加回答
舉報
0/150
提交
取消