为了账号安全,请及时绑定邮箱和手机立即绑定

如何展平 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 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信