The elements from a Stream
class can be grouped in a Map
using the collect method.
Map<key, List<Object>> map = stream.collect( Collectors.groupingBy( Object::methodKey ) );
In the following example, a Stream
of Object Employee is created. The Employee class has a variable name. Then the stream is group according to the name of the employee. The collect method is called using Collectors.groupingBy
, this way we have a Map with the employee name as the key. The Map
is then written in System.out.
import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; public class LambdaStreamPartitionBy { public static void main(String[] argv){ // Create the Stream Stream<Student> stream = Stream.of( new Student("a", 70), new Student("c", 80), new Student("a",90), new Student("b",100), new Student("b", 65) ); // Group the Elements Map<Boolean, List<Student>> map = stream.collect( Collectors.partitioningBy(s -> s.getGrade() >= 80 ) ); // Display the output System.out.println( "Produced Map: " + map ); System.out.println( "Student with passing Grade: " + map.get( Boolean.TRUE ) ); } static class Student { Student(String n, int w){ name = n; grade = w; } String name; int grade; public String getName(){ return name; } public int getGrade(){ return grade; } public String toString(){ return name; } } }
Produced Map: {a=[a, a], b=[b, b], c=[c]}