带局部变量的selenium java流比较列表
我有这样的代码来编译和获取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说他找不到“g”的表达。 如何使用流按某种条件搜索一个元素
# 1 楼答案
Eran指出了正确的方向——但是,我不明白,您试图找到的不是任何
getY()
值小于x.get(0).getY()
的WebElement,而是最小值的WebElement为了实现这一点,Stream.min()方法是你的朋友
应该找到预期的最小值
# 2 楼答案
它不起作用,因为
g
必须是有效的final,才能被lambda表达式访问。此外,在传递给filter
的lambda表达式中,您还有错误的语法你可以通过以下方式实现你想要的:
只要
x
是有效的final(这意味着初始化后没有为它分配新值),访问x
就可以工作请注意,我添加了
orElse
,用于findFirst
将返回空的Optional
,因为对空的Optional
调用get()
会引发异常编辑:
我专注于修复Java 8代码,而没有对您试图转换的循环给予足够的关注。我以为你想要任何比第一个元素低
y
的元素,但你想要的是总的最小值。我看到mg已经发布了正确的答案