我有方法:
public Monitor getCurrentMonitor() {
findCurrentMonitor();
return monitors.stream().filter(a -> a.isCurrent());
}
它的目的是找到当前的Monitor(列表中只有一个),然后返回它。我将如何在功能上实现这一目标,或者在程序上做得更好?
答案 0 :(得分:2)
您可以调用findFirst()
,它将返回Optional<Monitor>
,然后您只返回此Optional
实例中的值,或者如果它为空(如你说列表中有一个当前的监视器):
public Monitor getCurrentMonitor() {
return monitors.stream()
.filter(a -> a.isCurrent())
.findFirst()
.orElseThrow(() -> new NoCurrentMonitorException());
}
orElseThrow
部分是为了防止在空get
上调用Optional
(在这种情况下抛出自定义异常可能会更好,以使目标明确没有当前监视列表中的实例)。
<小时/> 我不确定你
findCurrentMonitor();
在做什么。我想你应该删除它,因为流上的过滤基本上是它的作用;即找到当前的监视器。从纯粹的功能方面来看,你不应该调用这个函数(findCurrentMonitor();
),因为它有副作用。