我有以下代码情况:
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?
,该怎么办?答案 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
。第一个管道执行它需要找到的最小元素生成/过滤。然后第二个流管道(这有点愚蠢,因为你有一个元素的流),继续进行映射。作为提到的评论者之一,您应该将其作为一个管道(您的第一个片段)运行,并且一切都会很好。