Collectors
Collectors use with Stream API in functional Style programming. The java.util.stream.Collectors introduce in java 1.8 version. Collectors provide facility formulate result you want obtain from stream API
The java.util.stream.Collectors class provide various collecting method group modify and obtain result from stream.
The static factory method of Collectors class
Collectors Application
package in.jk.java8.collectors;
import java.util.Comparator;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import in.jk.java8.Employee;
public class CollectorsApplication {
public static void main(String[] args) {
System.out.println(" Collectors Application :: \n");
List<Employee> empList = Employee.getEmployeeList();
System.out.println(" to List Collectors ");
List<Employee> employees null;
employees = empList.stream().filter(emp->emp.getName().equals("J K"))
.collect(Collectors.toList());
System.out.println("Employee List by toList Collectors :: "+employees);
System.out.println("\n counting Collectors \n ");
Long employeeCount =0;
employeeCount = empList.stream().filter(emp->emp.getName().equals("J K"))
.collect(Collectors.counting());
System.out.println("Employee List by counting Collectors :: "+employeeCount);
System.out.println(" \n maxBy and minBy Collectors \n");
Comparator<Employee> comparator = Comparator.comparingInt(Employee::getSalary);
Optional<Employee> maxSalaryEmployee=null;
Optional<Employee> minSalaryEmployee=null;
maxSalaryEmployee = empList.stream().filter(emp->emp.getName().equals("J K"))
.collect(Collectors.maxBy(comparator));
minSalaryEmployee = empList.stream().filter(emp->emp.getName().equals("J K"))
.collect(Collectors.minBy(comparator));
System.out.println("Employee by maxBy Collectors :: "+maxSalaryEmployee);
System.out.println("Employee by minBy Collectors :: "+minSalaryEmployee);
System.out.println(" \nSummarization Collectors \n");
System.out.println(" \nUse Of Summarization Collectors summingInt, averagingInt, summarizingInt\n");
int sumOfSalary=0;
double averageOfSalary=0;
sumOfSalary= empList.stream().filter(emp->emp.getName().equals("J K"))
.collect(Collectors.summingInt(Employee::getSalary));
averageOfSalary = empList.stream().filter(emp->emp.getName().equals("J K"))
.collect(Collectors.averagingInt(Employee::getSalary));
IntSummaryStatistics summaryStatisticsSalary=null;
summaryStatisticsSalary= empList.stream()
.filter(emp->emp.getName().equals("J K"))
.collect(Collectors.summarizingInt(Employee::getSalary));
System.out.println("Employee by summingInt Collectors :: "+sumOfSalary);
System.out.println("Employee by averagingInt Collectors :: "+averageOfSalary);
System.out.println("Employee by summarizingInt Collectors :: "+summaryStatisticsSalary);
System.out.println(" \njoining Collectors \n");
String employeeNames = empList.stream().map(Employee::getName)
.collect(Collectors.joining(","));
System.out.println("Employee Name by joining Collectors :: "+employeeNames);
System.out.println(" \nreducing Collectors \n");
int salarySum = empList.stream()
.collect(Collectors.reducing(0,Employee::getSalary,(i,j)->i+j));
System.out.println("Employee Salary Sum by reducing Collectors :: "+salarySum);
System.out.println(" \ngroupingBy Collectors \n");
Map<String,List<Employee>> employeeMap =null;
employeeMap = empList.stream()
.collect(Collectors.groupingBy(Employee::getCompany));
System.out.println("Employee grouping by groupingBy Collectors :: ");
employeeMap.entrySet().stream().forEach(System.out::println);
System.out.println(" \npartitioningBy Collectors \n");
Map<Boolean,List<Employee>> employeePartitionMap =null;
employeePartitionMap = empList.stream()
.collect(Collectors.partitioningBy(emp->emp.getCompany().equals("Google")));
System.out.println("Employee partitioning by partitioningBy Collectors :: ");
employeePartitionMap.entrySet().stream().forEach(System.out::println);
}
}
Employee .java
package in.jk.java8;
import java.util.ArrayList;
import java.util.List;
public class Employee {
private int empId;
private String name;
private String company;
private int salary;
//Getters and Setters
public int getEmpId() {
return empId;
}
public void setEmpId(int empId) {
this.empId = empId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Employee [empId=" + empId + ", name=" + name + ", company=" + company + ", salary=" + salary + "]";
}
public static List<Employee>getEmployeeList() {
List<Employee> empList =new ArrayList<Employee>();
Employee employee = new Employee();
employee.setEmpId(1);
employee.setName("J K");
employee.setCompany("Google");
employee.setSalary(1000);
Employee employee1 = new Employee();
employee1.setEmpId(2);
employee1.setName("J K");
employee1.setCompany("Google");
employee1.setSalary(2000);
Employee employee2 = new Employee();
employee2.setEmpId(3);
employee2.setName("J K");
employee2.setCompany("Google");
employee2.setSalary(3000);
Employee employee3 = new Employee();
employee3.setEmpId(4);
employee3.setName("SHA");
employee3.setCompany("APAR");
employee3.setSalary(4000);
Employee employee4 = new Employee();
employee4.setEmpId(5);
employee4.setName("HM");
employee4.setCompany("PAYTM");
employee4.setSalary(5000);
Employee employee5 = new Employee();
employee5.setEmpId(5);
employee5.setName("HM");
employee5.setCompany("APAR");
employee5.setSalary(6000);
Employee employee6 = new Employee();
employee6.setEmpId(6);
employee6.setName("JK");
employee6.setCompany("APAR");
employee6.setSalary(7000);
Employee employee7 = new Employee();
employee7.setEmpId(7);
employee7.setName("JK");
employee7.setCompany("JET BRAINS");
employee7.setSalary(8000);
Employee employee8 = new Employee();
employee8.setEmpId(8);
employee8.setName("AJ");
employee8.setCompany("APAR");
employee8.setSalary(9000);
Employee employee9 = new Employee();
employee9.setEmpId(8);
employee9.setName("AJ");
employee9.setCompany("ADOBE");
employee9.setSalary(10000);
empList.add(employee);
empList.add(employee1);
empList.add(employee2);
empList.add(employee3);
empList.add(employee4);
empList.add(employee5);
empList.add(employee6);
empList.add(employee7);
empList.add(employee8);
empList.add(employee9);
return empList;
}
}
Ouput in console....
Collectors Application ::
to List Collectors
Employee List by toList Collectors :: [Employee [empId=1, name=J K, company=Google, salary=1000], Employee [empId=2, name=J K, company=Google, salary=2000], Employee [empId=3, name=J K, company=Google, salary=3000]]
counting Collectors
Employee List by counting Collectors :: 3
maxBy and minBy Collectors
Employee by maxBy Collectors :: Optional[Employee [empId=3, name=J K, company=Google, salary=3000]]
Employee by minBy Collectors :: Optional[Employee [empId=1, name=J K, company=Google, salary=1000]]
Summarization Collectors
Use Of Summarization Collectors summingInt,averagingInt,summarizingInt
Employee by summingInt Collectors :: 6000
Employee by averagingInt Collectors :: 2000.0
Employee by summarizingInt Collectors :: IntSummaryStatistics{count=3, sum=6000, min=1000, average=2000.000000, max=3000}
joining Collectors
Employee Name by joining Collectors :: J K,J K,J K,SHA,HM,HM,JK,JK,AJ,AJ
reducing Collectors
Employee Salary Sum by reducing Collectors :: 55000
groupingBy Collectors
Employee grouping by groupingBy Collectors ::
Google=[Employee [empId=1, name=J K, company=Google, salary=1000], Employee [empId=2, name=J K, company=Google, salary=2000], Employee [empId=3, name=J K, company=Google, salary=3000]]
PAYTM=[Employee [empId=5, name=HM, company=PAYTM, salary=5000]]
ADOBE=[Employee [empId=8, name=AJ, company=ADOBE, salary=10000]]
JET BRAINS=[Employee [empId=7, name=JK, company=JET BRAINS, salary=8000]]
APAR=[Employee [empId=4, name=SHA, company=APAR, salary=4000], Employee [empId=5, name=HM, company=APAR, salary=6000], Employee [empId=6, name=JK, company=APAR, salary=7000], Employee [empId=8, name=AJ, company=APAR, salary=9000]]
partitioningBy Collectors
Employee partitioning by partitioningBy Collectors ::
false=[Employee [empId=4, name=SHA, company=APAR, salary=4000], Employee [empId=5, name=HM, company=PAYTM, salary=5000], Employee [empId=5, name=HM, company=APAR, salary=6000], Employee [empId=6, name=JK, company=APAR, salary=7000], Employee [empId=7, name=JK, company=JET BRAINS, salary=8000], Employee [empId=8, name=AJ, company=APAR, salary=9000], Employee [empId=8, name=AJ, company=ADOBE, salary=10000]]
true=[Employee [empId=1, name=J K, company=Google, salary=1000], Employee [empId=2, name=J K, company=Google, salary=2000], Employee [empId=3, name=J K, company=Google, salary=3000]]
No comments:
Post a Comment