在多次转换后使用findAny()时是否执行流延迟?

时间:2016-09-01 13:58:58

标签: java-8 java-stream

我有以下代码情况:

jQuery (
        function(e) {
                function t(t) {
                        return e("<div />",{"class":t})
                }
                if ("/login"==window.location.pathname) {
                        var n="Welcome to Jenkins";
                        e("#main-panel"),e("#side-panel");
                        var o=e('input[name="j_username"]').attr({placeholder:"LDAP Username",autofocus:"",required:""}).closest("td").prev("td").addClass("input-label"),r=e('input[name="j_password"]').attr({id:"j_password",placeholder:"Password",autofocus:"",required:""}).closest("td").prev("td").addClass("input-label");
                        e("a[href=signup]").closest("div").addClass("signup-container"),e("#yui-gen1-button").addClass("login-button");
                        var i=e(".submit-button"),a=e("#main-panel div:first").addClass("login-container"),c=e('form[name="login"]').length;                        c&&(o.text(""),r.text(""),a.removeAttr("style"),a.wrap(t("login-outer")),a.wrap(t("login-wrapper").prepend(" <h2> "+n+" </h2> ")),i.wrap(t("button-wrapper")),e(".login-container div:last").removeAttr("style"));
                }
        }
),

我的问题:在找到之前,是执行过的所有先前值的映射,还是懒惰地完成 - 只映射了一个变量,然后返回结果?我应该使用:

 return modulePatternPairs.stream()
                .filter(it -> it.matches(absoluteFilePath))
                .map(ModulePatternPair::getModule)
                .findAny()

如果我先进行映射,然后过滤并查找Any?

,该怎么办?

1 个答案:

答案 0 :(得分:3)

请注意您的第二个代码段:

 return modulePatternPairs.stream()
            .filter(it -> it.matches(absoluteFilePath))
            .findAny()
            .map(ModulePatternPair::getModule)

真的意味着:

 ModulePatternPair mp 
    = modulePatternPairs.stream()
            .filter(it -> it.matches(absoluteFilePath))
            .findAny();
 mp.map(ModulePatternPair::getModule)...

我认为应该回答你的问题 - 第一个语句运行一个完整的流管道,这会产生一个ModulePatternPair。第一个管道执行它需要找到的最小元素生成/过滤。然后第二个流管道(这有点愚蠢,因为你有一个元素的流),继续进行映射。作为提到的评论者之一,您应该将其作为一个管道(您的第一个片段)运行,并且一切都会很好。