我有这样的代码用于comapre并获取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();
我的编辑/ IDE说他找不到&#34; g&#34;表达。 如何使用流搜索某个元素?
答案 0 :(得分:4)
getY()
的 WebElement但其值为最小的WebElement
要实现这一点,Stream.min()方法就是你的朋友。
x.get(0).getY()
应该按预期找到最小值。
答案 1 :(得分:2)
它不起作用,因为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
(这意味着它在初始化后未分配新值)。
请注意,我为orElse
将返回空findFirst
的情况添加了Optional
,因为在空get()
上调用Optional
会引发异常。
编辑:
我专注于修复Java 8代码,而没有足够重视您尝试转换的循环。我以为你想要y
低于第一个元素的任何元素,但你想要总体最小值。我看到mg_已经发布了正确答案。