Monday, June 7, 2021

Stream.reduce() in Java with examples

Core Java, Oracle Java Tutorial and Material, Oracle Java Preparation, Oracle Java Certification, Java Exam Prep

Many times, we need to perform operations where a stream reduces to single resultant value, for example, maximum, minimum, sum, product, etc. Reducing is the repeated process of combining all elements.

More Info: 1Z0-900: Java EE 7 Application Developer

reduce operation applies a binary operator to each element in the stream where the first argument to the operator is the return value of the previous application and second argument is the current stream element.

Syntax :

T reduce(T identity, BinaryOperator<T> accumulator);

Where, identity is initial value 

of type T and accumulator is a 

function for combining two values.

sum(), min(), max(), count() etc. are some examples of reduce operations. reduce() explicitly asks you to specify how to reduce the data that made it through the stream.

Let us see some examples to understand the reduce() function in a better way :

Example 1 :

// Implementation of reduce method

// to get the longest String

import java.util.*;

class GFG {

// Driver code

public static void main(String[] args)

{

// creating a list of Strings

List<String> words = Arrays.asList("GFG", "LPI", "for",

"LPIQuiz", "LPIforLPI");

// The lambda expression passed to

// reduce() method takes two Strings

// and returns the longer String.

// The result of the reduce() method is

// an Optional because the list on which

// reduce() is called may be empty.

Optional<String> longestString = words.stream()

.reduce((word1, word2)

-> word1.length() > word2.length()

? word1 : word2);


// Displaying the longest String

longestString.ifPresent(System.out::println);

}

}

Output :

LPIforLPI

Example 2 :


// Implementation of reduce method
// to get the combined String
import java.util.*;

class GFG {

// Driver code
public static void main(String[] args)
{

// String array
String[] array = { "LPI", "for", "LPI" };

// The result of the reduce() method is
// an Optional because the list on which
// reduce() is called may be empty.
Optional<String> String_combine = Arrays.stream(array)
.reduce((str1, str2)
-> str1 + "-" + str2);

// Displaying the combined String
if (String_combine.isPresent()) {
System.out.println(String_combine.get());
}
}
}

Output :

LPI-for-LPI

Example 3 :


// Implementation of reduce method
// to get the sum of all elements
import java.util.*;

class GFG {

// Driver code
public static void main(String[] args)
{

// Creating list of integers
List<Integer> array = Arrays.asList(-2, 0, 4, 6, 8);

// Finding sum of all elements
int sum = array.stream().reduce(0,
(element1, element2) -> element1 + element2);

// Displaying sum of all elements
System.out.println("The sum of all elements is " + sum);
}
}

Output :

The sum of all elements is 16

Example 4 :


Core Java, Oracle Java Tutorial and Material, Oracle Java Preparation, Oracle Java Certification, Java Exam Prep
// Implementation of reduce method
// to get the product of all numbers
// in given range.
import java.util.*;
import java.util.stream.IntStream;

class GFG {

// Driver code
public static void main(String[] args)
{

// To get the product of all elements
// in given range excluding the
// rightmost element
int product = IntStream.range(2, 8)
.reduce((num1, num2) -> num1 * num2)
.orElse(-1);

// Displaying the product
System.out.println("The product is : " + product);
}
}

Output :

The product is : 5040

Related Posts

0 comments:

Post a Comment