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

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

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

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