如何访问 Java 8 中的流元素,或 return 流中的一个元素?
How to access elements of a stream in Java 8, or return one element of a stream?
我有方法:
public Monitor getCurrentMonitor() {
findCurrentMonitor();
return monitors.stream().filter(a -> a.isCurrent());
}
目的是找到当前的Monitor(列表中只有一个),return它。我将如何在功能上完成此操作,还是在程序上完成它会更好?
您可以调用 findFirst()
,这将 return 一个 Optional<Monitor>
,然后您只需 return 这个 Optional
实例中的值,或者您抛出一个如果它是空的则异常(正如你所说的列表中有一个当前监视器):
public Monitor getCurrentMonitor() {
return monitors.stream()
.filter(a -> a.isCurrent())
.findFirst()
.orElseThrow(() -> new NoCurrentMonitorException());
}
orElseThrow
部分是为了防止在空的 Optional
上调用 get
(在这种情况下最好抛出您的自定义异常以明确意图列表中没有当前监视器实例)。
我不确定你的 findCurrentMonitor();
在做什么。我想你应该删除它,因为流上的过滤基本上就是它的作用;即找到当前监视器。从纯粹的功能方面来看,您不应该调用此函数 (findCurrentMonitor();
),因为它有副作用。
我有方法:
public Monitor getCurrentMonitor() {
findCurrentMonitor();
return monitors.stream().filter(a -> a.isCurrent());
}
目的是找到当前的Monitor(列表中只有一个),return它。我将如何在功能上完成此操作,还是在程序上完成它会更好?
您可以调用 findFirst()
,这将 return 一个 Optional<Monitor>
,然后您只需 return 这个 Optional
实例中的值,或者您抛出一个如果它是空的则异常(正如你所说的列表中有一个当前监视器):
public Monitor getCurrentMonitor() {
return monitors.stream()
.filter(a -> a.isCurrent())
.findFirst()
.orElseThrow(() -> new NoCurrentMonitorException());
}
orElseThrow
部分是为了防止在空的 Optional
上调用 get
(在这种情况下最好抛出您的自定义异常以明确意图列表中没有当前监视器实例)。
我不确定你的
findCurrentMonitor();
在做什么。我想你应该删除它,因为流上的过滤基本上就是它的作用;即找到当前监视器。从纯粹的功能方面来看,您不应该调用此函数 (findCurrentMonitor();
),因为它有副作用。