We have a Employee Object with following fields – empId,salary,empAge,totalExp,empName,location,pincode. Now we are going to do following operations in the List containing Employee Object.
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class MatchEgs {
public static void main(String[] args) {
Employee objEmp1 = new Employee(101, "Mugil", 30, "Chennai", "600018", 5, 5000);
Employee objEmp2 = new Employee(102, "Mani", 33, "Chennai", "600028", 4, 6000);
Employee objEmp3 = new Employee(103, "Madhu", 32, "Chennai", "600054", 6, 10000);
Employee objEmp4 = new Employee(104, "Vinu", 29, "Bangalore", "500234", 5, 15000);
Employee objEmp5 = new Employee(105, "Srini", 40, "Delhi", "622142", 10, 7000);
Employee objEmp6 = new Employee(106, "Dimple", 35, "Delhi", "622142", 5, 8000);
List<Employee> arrEmployee = Arrays.asList(objEmp1, objEmp2, objEmp3, objEmp4, objEmp5, objEmp6);
}
}
Check if people match the criteria by passing predicate to anyMatch, noneMatch and allMatch
Predicate<Employee> empAgeGreaterThan35 = employee -> employee.getEmpAge() > 35;
Predicate<Employee> empAgeGreaterThan30 = employee -> employee.getEmpAge() > 30;
Predicate<Employee> empStayingInDelhi = employee -> employee.getLocation().equals("Delhi");
//Check if Some Employee Age is Greater 30
System.out.println(arrEmployee.stream().anyMatch(empAgeGreaterThan35));
//Check if all Employee Age is above 30
System.out.println(arrEmployee.stream().allMatch(empAgeGreaterThan30));
//Check if any Employee Location in Delhi
System.out.println(arrEmployee.stream().noneMatch(empStayingInDelhi));
Sort Employee by Name passing Comparator using Sorted and reversed. Sort based on more than
one field using thenComparing
Comparator<Employee> sortByName = Comparator.comparing(Employee::getEmpName);
List<Employee> arrSortedByName = arrEmployee.stream()
.sorted(sortByName)
.collect(Collectors.toList());
System.out.println("----------------Sorted By Name----------------");
arrSortedByName.forEach(employee -> System.out.println(employee));
Comparator<Employee> sortByNameReversed = Comparator.comparing(Employee::getEmpName).reversed();
List<Employee> arrSortedByNameRev = arrEmployee.stream()
.sorted(sortByNameReversed)
.collect(Collectors.toList());
System.out.println("----------------Sorted By Name Reversed----------------");
arrSortedByNameRev.forEach(employee -> System.out.println(employee));
Comparator<Employee> sortByNameanAge = Comparator.comparing(Employee::getEmpName).thenComparing(Employee::getEmpAge);
List<Employee> arrSortedByNameAge = arrEmployee.stream()
.sorted(sortByNameanAge)
.collect(Collectors.toList());
System.out.println("----------------Sorted By Name and Age----------------");
arrSortedByNameAge.forEach(employee -> System.out.println(employee));
Limit and Skip records using limit and skip
System.out.println("----------------Limit Records to 3 ----------------");
List<Employee> arrEmp3 = arrEmployee.stream()
.limit(3)
.collect(Collectors.toList());
arrEmp3.forEach(employee -> System.out.println(employee));
System.out.println("----------------Skip First 3 Records ----------------");
List<Employee> arrEmp4 = arrEmployee.stream()
.skip(3)
.collect(Collectors.toList());
arrEmp4.forEach(employee -> System.out.println(employee));
doWhile when condition is true using takeWhile and vice-versa(Until condition is met) using dropWhile
System.out.println("----------------Print Records until Chennai - Keeps printing until condition is True----------------");
List<Employee> arrEmp5 = arrEmployee.stream()
.takeWhile(employee -> employee.getLocation().equals("Chennai"))
.collect(Collectors.toList());
arrEmp5.forEach(employee -> System.out.println(employee));
System.out.println("----------------Print Records until Chennai - Stops printing when condition is Met ----------------");
List<Employee> arrEmp6 = arrEmployee.stream()
.dropWhile(employee -> employee.getLocation().equals("Bangalore"))
.collect(Collectors.toList());
arrEmp5.forEach(employee -> System.out.println(employee));
Get Minimum and Maximum age of employee using min and max. The List should be sorted first using comparator. Similarly get Employee with max experience in a particular location using predicate, comparator and max.
System.out.println("----------------Record with Min and Max Value ----------------");
Comparator<Employee> sortByAge = Comparator.comparing(Employee::getEmpAge);
List<Employee> arrEmp7 = arrEmployee.stream()
.min(sortByAge)
.stream()
.collect(Collectors.toList());
List<Employee> arrEmp8 = arrEmployee.stream()
.max(sortByAge)
.stream()
.collect(Collectors.toList());
arrEmp7.forEach(employee -> System.out.println(employee));
arrEmp8.forEach(employee -> System.out.println(employee));
System.out.println("----------------Get Employee with Max Exp in Chennai ----------------");
Predicate<Employee> filterEmpInChennai = employee -> employee.getLocation().equals("Chennai");
Comparator<Employee> sortByExp = Comparator.comparing(Employee::getTotalExp);
List<Employee> arrEmp11 = arrEmployee.stream()
.filter(filterEmpInChennai)
.max(sortByExp)
.stream()
.collect(Collectors.toList());
arrEmp11.forEach(employee -> System.out.println(employee));
FindFirst Employee who matches criteria and FindAny who matches criteria. Both takes predicate as input.
System.out.println("----------------Find First ----------------");
Predicate<Employee> empStayingInChennai = employee -> employee.getLocation().equals("Chennai");
List<Employee> arrEmp9 = arrEmployee.stream()
.filter(empStayingInChennai)
.findFirst()
.stream()
.collect(Collectors.toList());
arrEmp9.forEach(employee -> System.out.println(employee));
System.out.println("----------------Find Any ----------------");
List<Employee> arrEmp10 = arrEmployee.stream()
.filter(empAgeGreaterThan30)
.findAny()
.stream()
.collect(Collectors.toList());
arrEmp10.forEach(employee -> System.out.println(employee));
Get the Sum of salary of Employees in Location(Chennai) using sum
System.out.println("----------------Sum - Get Sum of Salary in Chennai ----------------");
//Method 1
Integer empTotalSalaryInChennai1 = arrEmployee.stream()
.filter(empStayingInChennai)
.map(employee -> employee.getSalary())
.collect(Collectors.toList())
.stream()
.reduce(0, Integer::sum);
System.out.println("Sum of Empl Salary - Chennai " + empTotalSalaryInChennai1);
//Method 2
Integer empTotalSalaryInChennai2 = arrEmployee.stream()
.filter(empStayingInChennai)
.mapToInt(Employee::getSalary).sum();
System.out.println("Sum of Empl Salary - Chennai " + empTotalSalaryInChennai2);
//Method 3
Integer empTotalSalaryInChennai3 = arrEmployee.stream()
.filter(empStayingInChennai)
.map(employee -> employee.getSalary())
.collect(Collectors.summingInt(Integer::intValue));
System.out.println("Sum of Empl Salary - Chennai " + empTotalSalaryInChennai3);
Get Average salary of employee in location using average
System.out.println("----------------Average - Get Average of Salary in Chennai ----------------");
OptionalDouble empAvgSalaryInChennai = arrEmployee.stream()
.filter(empStayingInChennai)
.mapToInt(Employee::getSalary)
.average();
System.out.println("Average Salary of Employee - Chennai " + empAvgSalaryInChennai);
Get List of Employees in a location using groupingBy. The Return type is hashmap with location as key and List of employees in value
System.out.println("----------------Group By - Get Employees grouped by Location ----------------");
Map<String, List<Employee>> hmEmp13 = arrEmployee.stream()
.collect(Collectors.groupingBy(Employee::getLocation));
hmEmp13.forEach((s, employees) -> {
System.out.println("Employees from "+ s);
employees.forEach(employee -> System.out.println(employee));
});
Get Employee grouped by Location and getting Maximum Salary groupingBy and maxBy
System.out.println("----------------Group By - Get Employees with Max Salary in Location ----------------");
Comparator<Employee> cmprSalary = Comparator.comparing(Employee::getSalary);
Map<String, Optional<Employee>> hmEmp14 = arrEmployee.stream()
.collect(Collectors.groupingBy(Employee::getLocation, Collectors.maxBy(cmprSalary)));
hmEmp14.forEach((s, employee) -> {
System.out.print("Employee Location is "+ s + " and salary is ");
employee.ifPresent(emp -> System.out.println(emp.getSalary()));
});
Get Employee Name using mapping grouped by Location using groupingBy
System.out.println("---------------- Employee at Location - Using Collectors.mapping ----------------");
Map<String, List<String>> hmEmp16 = arrEmployee.stream()
.collect(Collectors.groupingBy(Employee::getLocation, Collectors.mapping(Employee::getEmpName, Collectors.toList())));
hmEmp16.forEach((s, employee) -> {
System.out.println("Employee Name is " + employee + " and Location is "+ s );
});
Output
true
false
false
----------------Sorted By Name----------------
Employee{empId=106, empName='Dimple', empAge=35, totalExp=5, location='Delhi', pincode='622142', salary=8000}
Employee{empId=103, empName='Madhu', empAge=32, totalExp=6, location='Chennai', pincode='600054', salary=10000}
Employee{empId=102, empName='Mani', empAge=33, totalExp=4, location='Chennai', pincode='600028', salary=6000}
Employee{empId=101, empName='Mugil', empAge=30, totalExp=5, location='Chennai', pincode='600018', salary=5000}
Employee{empId=105, empName='Srini', empAge=40, totalExp=10, location='Delhi', pincode='622142', salary=7000}
Employee{empId=104, empName='Vinu', empAge=29, totalExp=5, location='Bangalore', pincode='500234', salary=15000}
----------------Sorted By Name Reversed----------------
Employee{empId=104, empName='Vinu', empAge=29, totalExp=5, location='Bangalore', pincode='500234', salary=15000}
Employee{empId=105, empName='Srini', empAge=40, totalExp=10, location='Delhi', pincode='622142', salary=7000}
Employee{empId=101, empName='Mugil', empAge=30, totalExp=5, location='Chennai', pincode='600018', salary=5000}
Employee{empId=102, empName='Mani', empAge=33, totalExp=4, location='Chennai', pincode='600028', salary=6000}
Employee{empId=103, empName='Madhu', empAge=32, totalExp=6, location='Chennai', pincode='600054', salary=10000}
Employee{empId=106, empName='Dimple', empAge=35, totalExp=5, location='Delhi', pincode='622142', salary=8000}
----------------Sorted By Name and Age----------------
Employee{empId=106, empName='Dimple', empAge=35, totalExp=5, location='Delhi', pincode='622142', salary=8000}
Employee{empId=103, empName='Madhu', empAge=32, totalExp=6, location='Chennai', pincode='600054', salary=10000}
Employee{empId=102, empName='Mani', empAge=33, totalExp=4, location='Chennai', pincode='600028', salary=6000}
Employee{empId=101, empName='Mugil', empAge=30, totalExp=5, location='Chennai', pincode='600018', salary=5000}
Employee{empId=105, empName='Srini', empAge=40, totalExp=10, location='Delhi', pincode='622142', salary=7000}
Employee{empId=104, empName='Vinu', empAge=29, totalExp=5, location='Bangalore', pincode='500234', salary=15000}
----------------Limit Records to 3 ----------------
Employee{empId=101, empName='Mugil', empAge=30, totalExp=5, location='Chennai', pincode='600018', salary=5000}
Employee{empId=102, empName='Mani', empAge=33, totalExp=4, location='Chennai', pincode='600028', salary=6000}
Employee{empId=103, empName='Madhu', empAge=32, totalExp=6, location='Chennai', pincode='600054', salary=10000}
----------------Skip First 3 Records ----------------
Employee{empId=104, empName='Vinu', empAge=29, totalExp=5, location='Bangalore', pincode='500234', salary=15000}
Employee{empId=105, empName='Srini', empAge=40, totalExp=10, location='Delhi', pincode='622142', salary=7000}
Employee{empId=106, empName='Dimple', empAge=35, totalExp=5, location='Delhi', pincode='622142', salary=8000}
----------------Print Records until Chennai - Keeps printing until condition is True----------------
Employee{empId=101, empName='Mugil', empAge=30, totalExp=5, location='Chennai', pincode='600018', salary=5000}
Employee{empId=102, empName='Mani', empAge=33, totalExp=4, location='Chennai', pincode='600028', salary=6000}
Employee{empId=103, empName='Madhu', empAge=32, totalExp=6, location='Chennai', pincode='600054', salary=10000}
----------------Print Records until Chennai - Stops printing when condition is Met ----------------
Employee{empId=101, empName='Mugil', empAge=30, totalExp=5, location='Chennai', pincode='600018', salary=5000}
Employee{empId=102, empName='Mani', empAge=33, totalExp=4, location='Chennai', pincode='600028', salary=6000}
Employee{empId=103, empName='Madhu', empAge=32, totalExp=6, location='Chennai', pincode='600054', salary=10000}
----------------Record with Min and Max Value ----------------
Employee{empId=104, empName='Vinu', empAge=29, totalExp=5, location='Bangalore', pincode='500234', salary=15000}
Employee{empId=105, empName='Srini', empAge=40, totalExp=10, location='Delhi', pincode='622142', salary=7000}
----------------Get Employee with Max Exp in Chennai ----------------
Employee{empId=103, empName='Madhu', empAge=32, totalExp=6, location='Chennai', pincode='600054', salary=10000}
----------------Find First ----------------
Employee{empId=101, empName='Mugil', empAge=30, totalExp=5, location='Chennai', pincode='600018', salary=5000}
----------------Find Any ----------------
Employee{empId=102, empName='Mani', empAge=33, totalExp=4, location='Chennai', pincode='600028', salary=6000}
----------------Sum - Get Sum of Salary in Chennai ----------------
Sum of Empl Salary - Chennai 21000
Sum of Empl Salary - Chennai 21000
Sum of Empl Salary - Chennai 21000
----------------Average - Get Average of Salary in Chennai ----------------
Average Salary of Employee - Chennai OptionalDouble[7000.0]
----------------Group By - Get Employees grouped by Location ----------------
Employees from Delhi
Employee{empId=105, empName='Srini', empAge=40, totalExp=10, location='Delhi', pincode='622142', salary=7000}
Employee{empId=106, empName='Dimple', empAge=35, totalExp=5, location='Delhi', pincode='622142', salary=8000}
Employees from Chennai
Employee{empId=101, empName='Mugil', empAge=30, totalExp=5, location='Chennai', pincode='600018', salary=5000}
Employee{empId=102, empName='Mani', empAge=33, totalExp=4, location='Chennai', pincode='600028', salary=6000}
Employee{empId=103, empName='Madhu', empAge=32, totalExp=6, location='Chennai', pincode='600054', salary=10000}
Employees from Bangalore
Employee{empId=104, empName='Vinu', empAge=29, totalExp=5, location='Bangalore', pincode='500234', salary=15000}
----------------Group By - Get Employees with Max Salary in Location ----------------
Employee Location is Delhi and salary is 8000
Employee Location is Chennai and salary is 10000
Employee Location is Bangalore and salary is 15000
---------------- Employee at Location - Get Employee Object grouped by Location ----------------
Employee Location is Delhi
Srini
Dimple
Employee Location is Chennai
Mugil
Mani
Madhu
Employee Location is Bangalore
Vinu
---------------- Employee at Location - Using Collectors.mapping ----------------
Employee Name is [Srini, Dimple] and Location is Delhi
Employee Name is [Mugil, Mani, Madhu] and Location is Chennai
Employee Name is [Vinu] and Location is Bangalore