我有这个代码:
private Iterable<Practitioner> pickPractitioners(List<String> ids) {
return Optional.ofNullable(ids)
.map(List::stream)
.orElse(Stream.of())
.collect(
Collectors.collectingAndThen(
Collectors.toList(),
this.practitionerRepository::findAllById
)
);
}
Run Code Online (Sandbox Code Playgroud)
问题是当ids
为空时,this.practitionerRepository::findAllById
也会被执行。
如果生成的收集器为空,我想避免此步骤。
有任何想法吗?
一般来说,要跳过终结器的这一部分,您可以传递 lambda 而不是方法引用,并检查输入是否为空:
.collect(
Collectors.collectingAndThen(
Collectors.toList(),
r -> r.isEmpty() ? Collections.emptyList() : this.practitionerRepository.findAllById(r)
)
);
Run Code Online (Sandbox Code Playgroud)
如果您的实际代码像本示例一样简单,那么您根本不需要使用流或可选。相反,您可以只检查三元运算符中方法的输入是否为 null 或为空:
return ids == null || ids.isEmpty() ? Collections.emptyList() :
this.practitionerRepository.findAllById(ids);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
843 次 |
最近记录: |