java 流比较列表与局部变量
java stream compare list with local variable
我有这样的代码来比较和获取 WebElement.. 但在最终形式中,方法看起来真的很糟糕。
WebElement g = x.get(0);
//...
for (WebElement webElement : x) {
if (webElement.getLocation().getY() < g.getLocation().getY()) {
g = webElement;
}
}
当我尝试写这样的东西时:
g = x.stream().filter(y -> {y.getLocation().getY() < g.getLocation().getY()}).findFirst().get();
我的 editor/IDE 说他找不到 "g" 表达式。
如何使用流按某种条件搜索一个元素?
它不起作用,因为 g
必须有效地最终才能被 lambda 表达式访问。此外,传递给 filter
.
的 lambda 表达式中的语法错误
你可以通过这种方式实现你想要的:
WebElement g = x.stream()
.filter(y -> (y.getLocation().getY() < x.get(0).getLocation().getY()))
.findFirst()
.orElse (x.get(0));
访问 x
只要 x
是有效的最终值(这意味着它在初始化后没有分配新值)。
请注意,我为 findFirst
将 return 一个空的 Optional
添加了 orElse
,因为在一个空的 [=17] 上调用 get()
=] 抛出异常。
编辑:
我专注于修复您的 Java 8 代码,而没有足够注意您尝试转换的循环。我以为你想要 y
比第一个元素低的任何元素,但你想要整体最小值。我看到 mg_ 已经发布了正确答案。
Eran 指出了正确的方向 - 然而,误解了您试图找到的 任何 WebElement 其 getY()
值小于 x.get(0).getY()
但最小值的WebElement。
要实现这一点,Stream.min() 方法是您的朋友。
WebElement g = x.stream().min(Comparator.comparing(elem ->
elem.getLocation().getY())).get();
应该按预期找到最小值。
我有这样的代码来比较和获取 WebElement.. 但在最终形式中,方法看起来真的很糟糕。
WebElement g = x.get(0);
//...
for (WebElement webElement : x) {
if (webElement.getLocation().getY() < g.getLocation().getY()) {
g = webElement;
}
}
当我尝试写这样的东西时:
g = x.stream().filter(y -> {y.getLocation().getY() < g.getLocation().getY()}).findFirst().get();
我的 editor/IDE 说他找不到 "g" 表达式。 如何使用流按某种条件搜索一个元素?
它不起作用,因为 g
必须有效地最终才能被 lambda 表达式访问。此外,传递给 filter
.
你可以通过这种方式实现你想要的:
WebElement g = x.stream()
.filter(y -> (y.getLocation().getY() < x.get(0).getLocation().getY()))
.findFirst()
.orElse (x.get(0));
访问 x
只要 x
是有效的最终值(这意味着它在初始化后没有分配新值)。
请注意,我为 findFirst
将 return 一个空的 Optional
添加了 orElse
,因为在一个空的 [=17] 上调用 get()
=] 抛出异常。
编辑:
我专注于修复您的 Java 8 代码,而没有足够注意您尝试转换的循环。我以为你想要 y
比第一个元素低的任何元素,但你想要整体最小值。我看到 mg_ 已经发布了正确答案。
Eran 指出了正确的方向 - 然而,误解了您试图找到的 任何 WebElement 其 getY()
值小于 x.get(0).getY()
但最小值的WebElement。
要实现这一点,Stream.min() 方法是您的朋友。
WebElement g = x.stream().min(Comparator.comparing(elem ->
elem.getLocation().getY())).get();
应该按预期找到最小值。