2016-08-23 13 views
2

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#allMatchStream#noneMatchために起こります。

これには何らかの理由がありますか?

+0

@ArnaudDenoyelleはJava 8 APIから、[booleanを返します](https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#anyMatch-java) .util.function.Predicate-)。実際にはフィルターではなく、指定された述部に一致するものがあるかどうかを確認する方法です。 –

+0

プログラマが 'anyMatch'に' findAny'のコードをコピーしていたところです。 _バグレポートを提出してください。そして、 'findAny.isPresent'をよく使うようにしてください。 –

答えて

3

EL 3.0ストリームAPIは、Java 8 Stream APIの前にファイナライズされました。それらを同期させようと努力したが、違いがある。これはその一つです。

+0

お役立ち情報下位互換性を損なう可能性があるので、Java Streamと同期する予定はないと思いますか?ありがとう! –

+0

それは正しいです。 –

関連する問題