我正在尝试将以下代码转换为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);
}
}
}
任何人可以帮我吗?
那些代码段的问题是它们修改了循环外定义的变量(第一个代码的变量(dateValue,groupValue和typeValue)第一个变量,第二个输入)。
但是,尽管您可以通过方法实现该方法,但Lambda表达式并不应该改变其范围事件中未定义的变量。
例如,在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);
}
});