Tomcat的EL Stream API有意义吗?

时间:2016-08-23 09:08:55

标签: java tomcat el facelets

我正在测试lambda表达式的表达式语言支持,这种表达式在EL 3 spec中得到了很好的定义。我有以下测试用例,使用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;
    }

}

我发现,即使是EL支持lambda表达式,Tomcat流API也会以某种方式与the Java's one(返回boolean)不同,并返回an Optional。所以显示的结果如下:

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

true

false 

Stream#allMatchStream#noneMatch也是如此。

这有什么理由吗?

1 个答案:

答案 0 :(得分:3)

EL 3.0 Stream API在Java 8 Stream API之前完成。虽然我们努力使它们保持同步,但也存在差异。这是其中之一。