Tomcat 的 EL Stream API 有意义吗?

Does Tomcat's EL Stream API make sense?

我正在测试 EL 3 spec 中定义明确的 lambda 表达式的表达式语言支持。我有以下测试用例,使用 Tomcat 8.0.30 和 Mojarra JSF 2.2.12:

test.xhtml

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

<h:head />
<h:body>
    <p>
        <h:outputText
            value="#{testBean.values.stream().anyMatch(str -> str == 'Test1')}" />
    </p>
    <p>
        <h:outputText
            value="#{testBean.values.stream().anyMatch(str -> str == 'Test1').get()}" />
    </p>
    <p>
        <h:outputText
            value="#{testBean.values.stream().anyMatch(str -> str == 'Test3').get()}" />
    </p>
</h:body>
</html>

TestBean.java

@ManagedBean
@ViewScoped
public class TestBean {

    private final List<String> values = Arrays.asList("Test1", "Test2");

    public List<String> getValues() {
        return values;
    }

}

我发现,即使 lambda 表达式也受 EL 支持,Tomcat 流 API 在某些方面与 the Java's one (which returns boolean) and it returns an Optional 不同。所以显示的结果是这样的:

org.apache.el.stream.Optional@66a02a04

true

false 

Stream#allMatchStream#noneMatch 也是如此。

有什么原因吗?

EL 3.0 Stream API 在 Java 8 Stream API 之前完成。尽管已努力使它们保持同步,但还是存在差异。这是其中之一。