Click here to watch in Youtube :
https://www.youtube.com/watch?v=-OLaK1cgmFg&list=UUhwKlOVR041tngjerWxVccw
Student.java
public class Student { private String studentName; private String teacherName; private int level; private String className; public Student(String studentName, String teacherName, int level, String className) { super(); this.studentName = studentName; this.teacherName = teacherName; this.level = level; this.className = className; } public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public String getTeacherName() { return teacherName; } public void setTeacherName(String teacherName) { this.teacherName = teacherName; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } @Override public String toString() { return "Student [studentName=" + studentName + ", teacherName=" + teacherName + ", level=" + level + ", className=" + className + "]"; } }StreamGroupByDemo1.java
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * Group by teacher name: * * SELECT column_name, count(column_name) * FROM table * GROUP BY column_name; * * This example will show how to "group classes by a teacher's name". Here you * will pass the groupingBy method a function in the form of a method reference * extracting each teacher name to the corresponding Student which will return 1 * key to many elements. This is similar to guava's Multimap collection which * allows for easy mapping of a single key to multiple values. * */ public class StreamGroupByDemo1 { public static void main(String[] args) { List<Student> studentList = getStudentList(); Map<String, List<Student>> groupByTeachersMap = studentList.stream() .collect(Collectors.groupingBy(Student::getTeacherName)); for (Map.Entry<String, List<Student>> entry : groupByTeachersMap .entrySet()) { System.out.println("Teacher Name : " + entry.getKey()); List<Student> list = entry.getValue(); for (Student student : list) { System.out.println(student); } System.out.println("-------------------------------------"); } } private static List<Student> getStudentList() { List<Student> studentList = new ArrayList<Student>(); studentList.add(new Student("Peter", "Mr.John", 1, "Java Basics")); studentList.add(new Student("Ram", "Mr.John", 1, "Webservice Basics")); studentList.add(new Student("Juli", "Mr.John", 2, "Advance Java")); studentList.add(new Student("Dave", "Mr.Kumar", 1, "Ruby basics")); studentList.add(new Student("Raja", "Mr.Kumar", 2, "Advance Ruby")); return studentList; } }Output
Teacher Name : Mr.John Student [studentName=Peter, teacherName=Mr.John, level=1, className=Java Basics] Student [studentName=Ram, teacherName=Mr.John, level=1, className=Webservice Basics] Student [studentName=Juli, teacherName=Mr.John, level=2, className=Advance Java] ------------------------------------- Teacher Name : Mr.Kumar Student [studentName=Dave, teacherName=Mr.Kumar, level=1, className=Ruby basics] Student [studentName=Raja, teacherName=Mr.Kumar, level=2, className=Advance Ruby] -------------------------------------StreamGroupByDemo2.java
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * Group by class level: * * SELECT column_name, count(column_name) * FROM table * GROUP BY column_name; * * This example will show "show all classes by level". * */ public class StreamGroupByDemo2 { public static void main(String[] args) { List<Student> studentList = getStudentList(); Map<Integer, List<Student>> groupByLevelMap = studentList.stream() .collect(Collectors.groupingBy(Student::getLevel)); for (Map.Entry<Integer, List<Student>> entry : groupByLevelMap .entrySet()) { System.out.println("Level : " + entry.getKey()); List<Student> list = entry.getValue(); for (Student student : list) { System.out.println(student); } System.out.println("----------------------------------"); } } private static List<Student> getStudentList() { List<Student> studentList = new ArrayList<Student>(); studentList.add(new Student("Peter", "Mr.John", 1, "Java Basics")); studentList.add(new Student("Ram", "Mr.John", 1, "Webservice Basics")); studentList.add(new Student("Juli", "Mr.John", 2, "Advance Java")); studentList.add(new Student("Dave", "Mr.Kumar", 1, "Ruby basics")); studentList.add(new Student("Raja", "Mr.Kumar", 2, "Advance Ruby")); return studentList; } }Output
Level : 1 Student [studentName=Peter, teacherName=Mr.John, level=1, className=Java Basics] Student [studentName=Ram, teacherName=Mr.John, level=1, className=Webservice Basics] Student [studentName=Dave, teacherName=Mr.Kumar, level=1, className=Ruby basics] ---------------------------------- Level : 2 Student [studentName=Juli, teacherName=Mr.John, level=2, className=Advance Java] Student [studentName=Raja, teacherName=Mr.Kumar, level=2, className=Advance Ruby] ----------------------------------StreamGroupByDemo3.java
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * GroupBy aggregate: * * SELECT LEVEL, count(LEVEL) * FROM STUDENT * GROUP BY LEVEL; * * This example will "count the number of classes per level": * */ public class StreamGroupByDemo3 { public static void main(String[] args) { List<Student> studentList = getStudentList(); /* * In an overloaded groupingBy method, you can pass a second collector. * Collectors have various reduce operations which can be passed, in * this case Collectors.counting which will count the number of classes * in each level. */ Map<Integer, Long> groupByLevelMap = studentList.stream() .collect(Collectors.groupingBy(Student::getLevel,Collectors.counting())); for (Map.Entry<Integer, Long> entry : groupByLevelMap.entrySet()) { System.out.println("Level = " + entry.getKey() + ", Count = " + entry.getValue()); } } private static List<Student> getStudentList() { List<Student> studentList = new ArrayList<Student>(); studentList.add(new Student("Peter", "Mr.John", 1, "Java Basics")); studentList.add(new Student("Ram", "Mr.John", 1, "Webservice Basics")); studentList.add(new Student("Juli", "Mr.John", 2, "Advance Java")); studentList.add(new Student("Dave", "Mr.Kumar", 1, "Ruby basics")); studentList.add(new Student("Raja", "Mr.Kumar", 2, "Advance Ruby")); return studentList; } }Output
Level = 1, Count = 3 Level = 2, Count = 2Click the below link to download the code:
https://sites.google.com/site/ramj2eev1/home/javabasics/StreamDemo_groupBy_level.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/Java/tree/master/BasicJava/StreamDemo_groupBy_level
Bitbucket Link:
https://bitbucket.org/ramram43210/java/src/4c6dd26ede26896338d54f8923608ecad05bf799/BasicJava/StreamDemo_groupBy_level/?at=master
See also:
No comments:
Post a Comment