EL 3 specでよく定義されているラムダ式の式言語サポートをテストしています。TomcatのELストリームAPIは意味がありますか?
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;
}
}
I:私は、Tomcat 8.0.30および2.2.12クロサギ科JSFを使用して、次のテストケースを持っていますラムダ式でさえELでサポートされていることがわかりましたが、TomcatストリームAPIは何らかの形でthe Java's one(ブール値を返します)と異なり、an Optionalを返します。だから、表示された結果がこれです:
[email protected]
true
false
同じことがStream#allMatch
とStream#noneMatch
ために起こります。
これには何らかの理由がありますか?
@ArnaudDenoyelleはJava 8 APIから、[booleanを返します](https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#anyMatch-java) .util.function.Predicate-)。実際にはフィルターではなく、指定された述部に一致するものがあるかどうかを確認する方法です。 –
プログラマが 'anyMatch'に' findAny'のコードをコピーしていたところです。 _バグレポートを提出してください。そして、 'findAny.isPresent'をよく使うようにしてください。 –