functional programming - Java 8 Pattern predicate using Stream - how variable is inferred? -


i reading "java se 8 impatient" , see curious code. it's this:

final pattern pattern = pattern.compile("....."); final long count = stream.of("cristian","daniel","ortiz","cuellar")       .filter(pattern.aspredicate())       .count(); 

i thought aspredicate method like

public boolean aspredicate(string stringtomatch){     ..... } 

but real implementation this

public predicate<string>aspredicate(){     return s -> matcher(s).find(); } 

i know use legal:

final long count = stream.of("cristian","daniel","ortiz","cuellar")       .filter(a->pattern.matcher(a).find())       .count(); 

but question how stream passes string pattern instance? how "cristian","daniel","ortiz","cuellar" each passed method s -> matcher(s).find(). mean how strings somehow passed , become s variable of aspredicate method.

the predicate interface functional interface defines 1 abstract method boolean test(t t) t in case string type, since you're filtering on stream<string>. in other words, code equivalent to:

final long count = stream.of("cristian","daniel","ortiz","cuellar")   .filter(new predicate<string>() {        public boolean test(string s) {           return matcher(s).find();        }    })   .count(); 

Comments

Popular posts from this blog

unity3d - Rotate an object to face an opposite direction -

angular - Is it possible to get native element for formControl? -

javascript - Why jQuery Select box change event is now working? -