Monday 15 March 2010

lambda - Usage of function type congruent lamdba expressions in Java 8 -



lambda - Usage of function type congruent lamdba expressions in Java 8 -

i struggle definition , usage of

stream.collect(supplier<r> supplier, biconsumer<r,? super t> accumulator, biconsumer<r,r> combiner)

method in java 8.

the method signature includes biconsumer typed parameters. biconsumer functionalinterface defines 1 functional method accept(object, object). far understand can utilize lambda look congruent functional interface.

but illustration mentioned in stream.collect javadoc e.g.

list<string> aslist = stringstream.collect(arraylist::new, arraylist::add, arraylist::addall);

i not understand why arraylist.add(e e) (single parameter) congruent biconsumer.accept(t t, u u) method (two parameters) , can used accumulator function in collect method.

as see have lack of understanding , appreciate explanation.

the accumulator biconsumer's 2 parameters (1) list , (2) item add together it. this:

list<string> aslist = stringstream.collect( arraylist::new, arraylist::add, arraylist::addall );

is equivalent this:

list<string> aslist = stringstream.collect( () -> new arraylist<>(), (list, item) -> list.add(item), (list1, list2) -> list1.addall(list2) );

which give same result this:

list<string> aslist = stringstream.collect( new supplier<arraylist<string>>() { @override public arraylist<string> get() { homecoming new arraylist<>(); } }, new biconsumer<arraylist<string>,string>() { @override public void accept(arraylist<string> list, string item) { list.add(item); } }, new biconsumer<arraylist<string>,arraylist<string>>() { @override public void accept(arraylist<string> list1, arraylist<string> list2) { list1.addall(list2); } } );

java lambda

No comments:

Post a Comment