我在閱讀「真正不耐煩的Java SE 8」,我看到一些好奇的代碼。它是這樣的:Java 8模式謂詞使用流 - 如何推斷變量?
final Pattern pattern = Pattern.compile(".....");
final long count = Stream.of("Cristian","Daniel","Ortiz","Cuellar")
.filter(pattern.asPredicate())
.count();
我只是想,asPredicate方法會是這樣的
public boolean asPredicate(String stringToMatch){
.....
}
但真正實現這樣的
public Predicate<String>asPredicate(){
return s -> matcher(s).find();
}
我知道我可以使用像這是完全合法的:
final long count = Stream.of("Cristian","Daniel","Ortiz","Cuellar")
.filter(a->pattern.matcher(a).find())
.count();
但我的問題是流如何將字符串傳遞給模式實例?如何 「克里斯蒂安」, 「丹尼爾」, 「奧爾蒂斯」, 「奎利亞爾」 每被傳遞給方法s -> matcher(s).find()
。我的意思是字符串如何通過併成爲asPredicate方法的s
變量。
你知道你可以通過'certainKindOfExpression'到'.filter(...)',那麼,爲什麼它是一個謎,你可以調用'的someMethod()'代替,其中包含'return certainKindOfExpression',然後將'someMethod()'的結果傳遞給'.filter(...)'?這對lambda表達式並不特別。如果你明白如何在'filter'中傳遞一個lambda表達式,就像你聲稱的那樣,你應該理解相同的lambda表達式如何與'return'語句一起工作。當然,不管你調用lambda的參數's'還是'a'都沒有區別。 – Holger