如何在java8中设置多个条件运算符

时间:2017-12-21 03:45:24

标签: java java-8

我试图在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);
        }
    }
}

任何人都可以帮助我吗?

1 个答案:

答案 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);
    }
  });