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#allMatch
和 Stream#noneMatch
也是如此。
有什么原因吗?
EL 3.0 Stream API 在 Java 8 Stream API 之前完成。尽管已努力使它们保持同步,但还是存在差异。这是其中之一。
我正在测试 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#allMatch
和 Stream#noneMatch
也是如此。
有什么原因吗?
EL 3.0 Stream API 在 Java 8 Stream API 之前完成。尽管已努力使它们保持同步,但还是存在差异。这是其中之一。