亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何展平 Single<R> 流

如何展平 Single<R> 流

互換的青春 2023-07-13 13:45:45
我有這個代碼? ? 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();


查看完整回答
反對 回復 2023-07-13
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

替代解決方案:

public Stream<PaymentEntity> getPayments(List<String> paymentIds) {
    return Observable.fromIterable(paymentIds)
            .flatMapSingle(id -> paymentsRepository.getById(id))
            .toList()
            .blockingGet()
            .stream();
}


查看完整回答
反對 回復 2023-07-13
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

您可以等待,直到Singlelambda 中的當前信號發出成功值,使用.blockingGet()

return paymentIds.stream()
            .map(id -> paymentsRepository.getById(id).blockingGet());

或者您可以等待,直到所有反應鏈都以這種方式發出成功值:

return Observable.fromIterable(paymentIds)
            .flatMapSingle(paymentsRepository::getById)
            .toList()
            .blockingGet()
            .stream();

還可以考慮使用Flowable:與 不同的是Observable,它支持背壓策略。


查看完整回答
反對 回復 2023-07-13
  • 3 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號