java - What is the difference between .foreach and .stream().foreach? -
this question has answer here:
this example: code a:
files.foreach(f -> { //todo });
and code b may use on way:
files.stream().foreach(f -> { });
what difference between both, stream()
, no stream()
?
practically speaking, same, there small semantic difference.
code defined iterable.foreach
, whereas code b defined stream.foreach
. definition of stream.foreach
allows elements processed in order -- sequential streams. (for parallel streams, stream.foreach
process elements out-of-order.)
iterable.foreach
gets iterator source , calls foreachremaining()
on it. far can see, current (jdk 8) implementations of stream.foreach
on collections classes create spliterator built 1 of source's iterators, , call foreachremaining
on iterator -- iterable.foreach
does. same thing, though streams version has setup overhead.
however, in future, it's possible streams implementation change no longer case.
(if want guarantee ordering of processing streams elements, use foreachordered()
instead.)
Comments
Post a Comment