Just iterating below list & adding into another shared mutable list via java 8 streams.
List<String> list1 = Arrays.asList("A1","A2","A3","A4","A5","A6","A7","A8","B1","B2","B3");
List<String> list2 = new ArrayList<>();
Consumer<String> c = t -> list2.add(t.startsWith("A") ? t : "EMPTY");
list1.stream().forEach(c);
list1.parallelStream().forEach(c);
list1.forEach(c);
What is the difference between above three iteration & which one we need to use. Are there any considerations?
Regardless of whether you use parallel or sequential Stream, you shouldn't use forEach when your goal is to generate a List. Use map with collect:
List<String> list2 = 
    list2.stream()
         .map(item -> item.startsWith("A") ? item : "EMPTY")
         .collect(Collectors.toList());
                        Functionally speaking,for the simple cases they are almost the same, but generally speaking, there are some hidden differences:
forEach for iterable use-cases stating that:performs the given action for each element of the Iterable until all elements have been processed or the action throws an exception.
and also we can iterate over a collection and perform a given action on each element – by just passing a class that implements the Consumer interface
void forEach(Consumer<? super T> action)
https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html#forEach-java.util.function.Consumer-
Stream.forEach is random while Iterable.forEach is always executed in the iteration order of the Iterable.Iterable.forEach is iterating over a synchronized collection, Iterable.forEach takes the collection's lock once and holds it across all the calls to the action method. The Stream.forEach call uses the collection's spliterator, which does not lockStream.forEach is required to be non-interfering while Iterable.forEach is allowed to set values in the underlying ArrayList without problems.ConcurrentModificationException. https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#fail-fast
More Info:
- What is the difference between .foreach and .stream().foreach?
 - What is difference between Collection.stream().forEach() and Collection.forEach()?
 
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With