Java 如何平展一股单股气流<;R>;

Java 如何平展一股单股气流<;R>;,java,java-stream,rx-java,Java,Java Stream,Rx Java,我有这个密码 public Stream<PaymentEntity> getPayments(List<String> paymentIds) { return paymentIds.stream() .flatMap(id -> paymentsRepository.getById(id)) } 公共流getPayments(列出PaymentId){ return paymentIds.stream(

我有这个密码

    public Stream<PaymentEntity> getPayments(List<String> paymentIds) {
        return paymentIds.stream()
                .flatMap(id -> paymentsRepository.getById(id))

}
公共流getPayments(列出PaymentId){
return paymentIds.stream()
.flatMap(id->paymentsRepository.getById(id))
}
paymentsRepository.getById(id)
正在返回
Single

但我有编译时错误

不存在类型变量R的实例,因此 单曲顺应潮流

编辑,对于任何询问单曲的人,您可以使用

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();
List result=new ArrayList();
paymentIds.forEach(id->paymentsRepository.getById(id).toObservable().subscribe(result::add));
返回result.stream();
您可以使用

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();
List result=new ArrayList();
paymentIds.forEach(id->paymentsRepository.getById(id).toObservable().subscribe(result::add));
返回result.stream();
替代解决方案:

public Stream<PaymentEntity> getPayments(List<String> paymentIds) {
    return Observable.fromIterable(paymentIds)
            .flatMapSingle(id -> paymentsRepository.getById(id))
            .toList()
            .blockingGet()
            .stream();
}
公共流getPayments(列出PaymentId){
可观测的返回。可观测的(PaymentId)
.flatMapSingle(id->paymentsRepository.getById(id))
托利斯先生()
.blockingGet()
.stream();
}
替代解决方案:

public Stream<PaymentEntity> getPayments(List<String> paymentIds) {
    return Observable.fromIterable(paymentIds)
            .flatMapSingle(id -> paymentsRepository.getById(id))
            .toList()
            .blockingGet()
            .stream();
}
公共流getPayments(列出PaymentId){
可观测的返回。可观测的(PaymentId)
.flatMapSingle(id->paymentsRepository.getById(id))
托利斯先生()
.blockingGet()
.stream();
}

您可以等待,直到lambda中的当前
单个
使用
.blockingGet()
发出成功值的信号:

或者,您可以通过以下方式等待所有反应链发出成功值的信号:

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

还可以考虑使用
可流动的
:与
可观察的
不同,它支持背压策略。

您可以等待,直到lambda中的当前
单个
使用
.blockingGet()
发出成功值的信号:

或者,您可以通过以下方式等待所有反应链发出成功值的信号:

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

还可以考虑使用
可流动的
:与
可观察的
不同,它支持背压策略。

什么是
单个
,您打算如何将其转换为
?提供给
平面图的函数必须返回流。您需要将
单个
转换为
。如果没有流返回,为什么需要将其展平?什么是单曲?它是否有一些getter返回
PaymentEntity
?看起来代码应该使用常规的
map
,例如
map(id->paymentsRepository.getById(id).get())
(假设有
Single.get()
)。什么是
单个
,您打算如何将其转换为
?提供给
flatMap
的函数必须返回流。您需要将
单个
转换为
。如果没有流返回,为什么需要将其展平?什么是单曲?它是否有一些getter返回
PaymentEntity
?看起来代码应该使用常规的
map
,例如
map(id->paymentsRepository.getById.get())
(假设有
Single.get()
),我想你的意思是blockingGet()。我不能用它来阻止调用的执行thread@MeladBasilius我不知道blockingGet()是toBlocking()@YCF\L也许我们在谈论不同的事情,你能提供关于toBlocking()的文档链接吗,我需要阅读it@MeladBasilius是否正在使用
导入rx.Single
或其他库?@Melad Basilius很抱歉我正在使用电话,因为我无法快速回答,请检查我的编辑,希望这能帮助您我想您是指blockingGet()。我不能用它来阻止调用的执行thread@MeladBasilius我不知道blockingGet()是toBlocking()@YCF\L也许我们在谈论不同的事情,你能提供关于toBlocking()的文档链接吗,我需要阅读it@MeladBasilius是否正在使用
导入rx.Single
或其他库?@Melad Basilius很抱歉我正在使用电话,因为我无法快速回答,请查看我的编辑,希望这能帮助您