猿问

如何展平 Single<R> 流

我有这个代码


    public Stream<PaymentEntity> getPayments(List<String> paymentIds) {

        return paymentIds.stream()

                .flatMap(id -> paymentsRepository.getById(id))


}

paymentsRepository.getById(id)正在返回Single<PaymentEntity>


但我遇到编译时错误


不存在类型变量 R 的实例,因此 Single 符合 Stream


互换的青春
浏览 165回答 3
3回答

拉莫斯之舞

您可以使用return&nbsp;paymentIds.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(id&nbsp;->&nbsp;paymentsRepository.getById(id).toBlocking().value());或者rxjava 2您可以使用:&nbsp;return&nbsp;paymentIds.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(id&nbsp;->&nbsp;paymentsRepository.getById(id).blockingGet());评论后我认为你可以采用这个解决方案:&nbsp;List<PaymentEntity>&nbsp;result&nbsp;=&nbsp;new&nbsp;ArrayList<>(); &nbsp;paymentIds.forEach(id&nbsp;->&nbsp;paymentsRepository.getById(id).toObservable().subscribe(result::add)); &nbsp;&nbsp;return&nbsp;result.stream();

智慧大石

替代解决方案:public&nbsp;Stream<PaymentEntity>&nbsp;getPayments(List<String>&nbsp;paymentIds)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Observable.fromIterable(paymentIds) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flatMapSingle(id&nbsp;->&nbsp;paymentsRepository.getById(id)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.toList() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.blockingGet() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.stream(); }

慕少森

您可以等待,直到Singlelambda 中的当前信号发出成功值,使用.blockingGet():return&nbsp;paymentIds.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(id&nbsp;->&nbsp;paymentsRepository.getById(id).blockingGet());或者您可以等待,直到所有反应链都以这种方式发出成功值:return&nbsp;Observable.fromIterable(paymentIds) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flatMapSingle(paymentsRepository::getById) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.toList() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.blockingGet() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.stream();还可以考虑使用Flowable:与 不同的是Observable,它支持背压策略。
随时随地看视频慕课网APP

相关分类

Java
我要回答