此JS代码行的Java正确等效项是什么?

时间:2019-05-15 03:03:42

标签: javascript java

在看到某处在JS中用1行编写的相同代码后,我尝试使用Java中的Lambda表达式来减少代码行。但是我收到以下错误:

  

不兼容的类型。   需要:   org.openqa.selenium.logging.LogEntries   发现:   无效

这就是我现在拥有的。

List e =driver.manage().logs().get(LogType.BROWSER).getAll();
String s="",t ="";
if (!e.isEmpty()){
                for (Object l : e)
                {
                    t=l.toString();
                    if(t.contains("SyntaxError")){
                        s = s + t+"<BR/>";
                    }
                    else if(t.contains("EvalError")){
                        s = s + t+"<BR/>";
                    }
                    else if(t.contains("ReferenceError")){
                        s = s + t+"<BR/>";
                    }
                    else if(t.contains("RangeError")){
                        s = s + t+"<BR/>";
                    }
                    else if(t.contains("TypeError")){
                        s = s + t+"<BR/>";
                    }
                    else if(t.contains("URIError")){
                        s = s + t+"<BR/>";
                    }
                }

这就是我想要达到的目的:

List<String > errorStrings = new ArrayList<>();
            errorStrings.add("SyntaxError");
            errorStrings.add("EvalError");
            errorStrings.add("ReferenceError");
            errorStrings.add("RangeError");
            errorStrings.add("TypeError");
            errorStrings.add("URIError");
            LogEntries l = driver.manage().logs().get(LogType.BROWSER).forEach(le -> errorStrings.stream().anyMatch(er -> le.getMessage().contains(er)));

按照下面这行代码编写的是JS:

var jsErrors = Driver.Manage().Logs.GetLog(LogType.Browser).Where(x => errorStrings.Any(e => x.Message.Contains(e)));

请帮助我了解我在做什么错。

-TIA

1 个答案:

答案 0 :(得分:0)

您的代码是

LogEntries l = driver.manage().logs().get(LogType.BROWSER)
    .forEach(le -> errorStrings.stream()
        .anyMatch(er -> le.getMessage().contains(er)));

您的错误消息是

Incompatible types. Required: org.openqa.selenium.logging.LogEntries Found: void

该错误消息告诉您您的赋值语句希望您返回LogEntries,但它得到的是void。之所以得到void,是因为这是Stream.forEach方法的返回类型。 forEach方法用于消耗流的所有元素,不返回任何内容。

我认为您要尝试的是过滤一组日志条目并将它们变成LogEntries对象,对吗?如果是这种情况,我怀疑您想要filter而不是forEach

我不是硒专家,所以我不建议您如何打开Stream<LogEntry> into a LogEntries`。我假设您可以使用reduce或collect操作,但最好将其作为一个单独的问题提出。