请您给我一个提示,如何为下一个Java代码创建lambda表达式:
for (String symbol : word) {
sendKeys(symbol);
if (isElementVisible(word)) {
clickByVisibleText(word);
break;
}
}
我理解如何使用if表达式来实现循环周期,但是如果循环包含某些方法(like sendKeys()
)以及使用break
运算符,我不明白我该怎么做。
答案 0 :(得分:0)
我想你的意思是使用lambda表达式将集合上的外部迭代更改为内部迭代。
您可能正在努力突然完成内部forEach()
循环。
根据Iterable.forEach()
的文档:
对
Iterable
的每个元素执行给定操作,直到处理完所有元素或操作引发异常 ...异常抛出的异常动作转发给来电者。
因此,不是使用break
,而是抛出一个会立即破坏内部循环的异常。
代码将是这样的 - 我不能说我喜欢它但它有效。您可以创建自己的类BreakException
,其范围为RuntimeException
。
try {
word.forEach(symbol -> {
sendKeys(symbol);
if (isElementVisible(word)) { // see N.B.
clickByVisibleText(word);
throw new BreakException();
}
});
}
catch (BreakException e) {
// here you know that your condition has been fulfilled at least once
}
请注意,lambda表达式周围的try...catch
不是,而是围绕整个forEach()
方法。为了使其更加明显,请参阅以下代码转录,以便更清楚地显示:
Consumer<? super String> findElement = symbol -> {
sendKeys(symbol);
if (isElementVisible(word)) { // see N.B.
clickByVisibleText(word);
throw new BreakException();
}
});
try {
word.forEach(findElement);
}
catch (BreakException e) {
// here you know that your condition has been fulfilled at least once
}
N.B。:请重新考虑您的代码
if (isElementVisible(word)) {
clickByVisibleText(word);
throw new BreakException();
}
看起来很可疑。在循环的中间,你一直指的是整个集合word
,它们很臭。