私は「Java SE 8 for the Really Impatient」を読んでいます。興味深いコードがあります。それはこのようなものだ:Streamを使用した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();
しかし、私の質問は、ストリームがパターンインスタンスにStringを渡す方法ですか?どのように "クリスティアン"、 "ダニエル"、 "オルティス"、それぞれの方法s -> matcher(s).find()
に渡される "クエリャル"。私はどのように文字列が渡され、asPredicateメソッドの変数s
になるかを意味します。
、なぜそれがあなたの代わりに' 'のsomeMethod()を呼び出すことができます謎ですこれは 'return certainKindOfExpression'を含み、' someMethod() 'の結果を' .filter(...) 'に渡しますか?ラムダ式には特別なことではありません。ラムダ式が 'filter'でどのように動作するかを理解していれば、同じラムダ式が' return'ステートメントでどのように動作するかを理解する必要があります。もちろん、ラムダのパラメータ 's'または' a'を呼び出しても違いはありません。 – Holger