Home  >  Forum  >  Core Java
Post New Query

Difference: Java 8 stream reduce vs collect

joined on
June 15,2014
Asked on September 27,2016
What is the difference between Java 8 stream reduce() and collect() method?
joined on
October 10,2013
Replied on September 30,2016

1.   reduce() method always creates a  new value whereas collect() method updates or mutates an existing value.
2.  reduce() performs reduction whereas collect() performs mutable reduction.   

3.   Suppose we are want summation then using reduce(), we use as follows
List<Integer> list = Arrays.asList(3,2,5,6);
int sum = list.stream().reduce(0, Integer::sum);
And using collect(),  we calculate sum as follows.
IntSummaryStatistics stats = list.stream().collect(Collectors.summarizingInt(i->i));
4. In parallel processing  reduce() and collect() both uses combiner.   reduce() works as follows.
public class ReduceDemo3 {
    public static void main(String[] args) {
      List<Integer> list2 = Arrays.asList(2, 3, 4);
      //Here result will be 2*2 + 2*3 + 2*4 that is 18.
      int res = list2.parallelStream().reduce(2, (s1, s2) -> s1 * s2, (p, q) -> p + q);
 Find the URL 

And collect() works as follows.
public class StreamCollect {
                public static void main(String[] args) {
                    List<String> list = Arrays.asList("Mukesh", "Vishal", "Amar");
                    String result = list.parallelStream().collect(StringBuilder::new,
                                                (response, element) -> response.append(" ").append(element),
                                                (response1, response2) -> response1.append(",").append(response2.toString()))
                    System.out.println("Result: " + result);

Find the URL


Write Answer

Copyright ©2017 concretepage.com, all rights reserved |Privacy Policy | Contact Us