【发布时间】:2021-07-19 05:24:17
【问题描述】:
从这段代码开始:
public Thing thereCanBeOnlyOne(Stream<Thing> stream) {
List<Thing> things = stream.collect(Collectors.toList());
if(things.size() != 1) {
throw new IllegalArgumentException();
}
return things.get(0);
}
有没有更简洁的方式来表达方法体?
到目前为止我尝试了什么:
我阅读了Collector 和reduce 的文档,但没有找到任何东西。
【问题讨论】:
-
.reduce(IDENTITY, (a, b) -> { if(a.equals(IDENTITY)) return b; throw new IllegalArgumentException(); });但这取决于你的口味。 -
取决于您的“惯用语”阈值:Guava 的
Iterables.getOnlyElement将是我的首选。 -
哦,番石榴也有
MoreCollectors.onlyElement收集器。 -
@AndyTurner 肯定为此目的的外部库是矫枉过正?
-
@OleV.V.这不完全是一个正在工作的外部库;)当然,如果这就是你所需要的,那就太过分了。但是,如果您已经在使用它,那就太好了。存在其他库,ofc,因此您可以在您已经使用的库中找到等效的库。
标签: java java-stream