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很抱歉我正在使用电话,因为我无法快速回答,请查看我的编辑,希望这能帮助您