我试图在java 8中转换下面的代码,但不确定我哪里出错了。我有2个代码片段,我想转换。这是第一个:
for (WebElement value :values) {
WebElement dateElement = SharedWebDriver.getInstance()
.findOptionalElement(By.className("text"), value);
WebElement groupElement =
SharedWebDriver.getInstance().findOptionalElement(By.id("label"),
value);
WebElement typeElement =
SharedWebDriver.getInstance().findOptionalElement(By.id("type"),
value);
if (dateElement != null) {
dateValue = dateElement.getText().trim();
}
if (groupElement != null) {
groupValue = groupElement.getText().trim();
}
if(typeElement!= null){
typeValue = typeElement.getText().trim();
}
}
在这里,我想使用java 8设置值。我尝试使用过滤器选项,但它不起作用。
for (WebElement header : headers) {
if (header != null) {
if (header.getText().equals("A")) {
entry.setDate(dateValue);
} else if (header.getText().equals("B")) {
entry.setGroup(groupValue);
} else if (header.getText().equals("C")) {
entry.setType(typeValue);
}
}
}
任何人都可以帮助我吗?
答案 0 :(得分:-1)
这些代码片段的问题在于它们修改了在循环外部定义的变量(第一个的dateValue,groupValue和typeValue,以及第二个的条目)。
但是lambda表达式并不是真的应该改变它们在scope事件中定义的变量,尽管你可以通过这些方法来实现。
例如,在lambda表达式中:
word = "hello"
将无效website.setTitle("title")
我在Java 8中转换了你的代码片段,我没有花时间来测试它,但如果我没有错,那么第一个将无效,而第二个将无法工作,原因如上所述。
values.stream()
.map(value -> new WebElement[] {
SharedWebDriver.getInstance().findOptionalElement(By.className("text"), value),
SharedWebDriver.getInstance().findOptionalElement(By.id("label"), value)),
SharedWebDriver.getInstance().findOptionalElement(By.id("type"), value) })
.forEach(webElements[] -> {
if (webElements[0] != null) {
dateValue = webElements[0].getText().trim();
}
if (webElements[1] != null) {
groupValue = webElements[1].getText().trim();
}
if(webElements[2] != null){
typeValue = webElements[2].getText().trim();
}
});
headers.stream()
.filter(Objects::nonNull)
.forEach(header -> {
if (header.getText().equals("A")) {
entry.setDate(dateValue);
} else if (header.getText().equals("B")) {
entry.setGroup(groupValue);
} else if (header.getText().equals("C")) {
entry.setType(typeValue);
}
});