Java 8 Collectors: groupingBy Example
November 29, 2014
groupingBy is a static method of java.util.stream.Collectors in java 8. groupingBy does the grouping of elements on the basis of any given key and returns a Collector. Find the method syntax.
<T,K> Collector<T,?,Map<K,List<T>>> groupingBy(Function<? super T,? extends K> classifier)
Student.java
package com.concretepage.util.stream; public class Student { private String name; private int age; private String className; public Student(String name,String className,int age){ this.name=name; this.age=age; this.className = className; } public String getName() { return name; } public int getAge() { return age; } public String getClassName() { return className; } }
Map<String, List<Student>> stdByClass = list.stream() .collect(Collectors.groupingBy(Student::getClassName));
CollectorsGroupingBy.java
package com.concretepage.util.stream; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class CollectorsGroupingBy { public static void main(String[] args) { Student s1 = new Student("Ram", "A", 20); Student s2 = new Student("Shyam", "B", 22); Student s3 = new Student("Mohan", "A", 22); Student s4 = new Student("Mahesh", "C", 20); Student s5 = new Student("Krishna", "B", 21); List<Student> list = Arrays.asList(s1,s2,s3,s4,s5); //Group Student on the basis of ClassName System.out.println("----Group Student on the basis of ClassName----"); Map<String, List<Student>> stdByClass = list.stream() .collect(Collectors.groupingBy(Student::getClassName)); stdByClass.forEach((k,v)->System.out.println("Key:"+k+" "+ ((List<Student>)v).stream().map(m->m.getName()).collect(Collectors.joining(",")))); //Group Student on the basis of age System.out.println("----Group Student on the basis of age----"); Map<Integer, List<Student>> stdByAge = list.stream() .collect(Collectors.groupingBy(Student::getAge)); stdByAge.forEach((k,v)->System.out.println("Key:"+k+" "+ ((List<Student>)v).stream().map(m->m.getName()).collect(Collectors.joining(",")))); } }
----Group Student on the basis of ClassName---- Key:A Ram,Mohan Key:B Shyam,Krishna Key:C Mahesh ----Group Student on the basis of age---- Key:20 Ram,Mahesh Key:21 Krishna Key:22 Shyam,Mohan