如何在Java8中设置多条条件性播种机



我正在尝试将以下代码转换为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);
    }
  });

最新更新