2016-08-23 8 views
2

EL 3 spec에 잘 정의 된 람다 식에 대한 표현식 언어 지원을 테스트하고 있습니다.Tomcat의 EL Stream 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 : 저는 톰캣 8.0.30 및 인 Mojarra JSF 2.2.12를 사용하여 다음 테스트 케이스를 가지고 EL에 의해 lambda 표현식이 지원된다는 것을 알았다면 Tomcat 스트림 API는 어떤 식 으로든 the Java's one (부울을 반환 함)과 다르며 an Optional을 반환합니다. 그래서 표시된 결과는 이것이다 :

[email protected] 

true 

false 

같은이 Stream#allMatchStream#noneMatch 위해 발생합니다.

어떤 이유가 있습니까?

+0

Java 8 API의 @ArnaudDenoyelle은 [부울 값을 반환합니다.] (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 Stream API가 Java 8 Stream API보다 먼저 finalize되었습니다. 동기화를 유지하기 위해 노력했지만 차이점이 있습니다. 이것은 그들 중 하나입니다.

+0

잘 알고 있습니다. 이전 버전과의 호환성을 깨뜨릴 것이므로 Java Stream과 동기화 할 계획이 없다고 생각합니까? 감사! –

+0

맞습니다. –