Reading Time: 3 minutes
I was wondering new features in Java 8 and wanted to play around with Lambda expressions. So I’ve eventually ended up preparing some collection examples. Hope you’ll easily summarize and understand it
The Code
package com.oracle.lambda; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.Predicate; public class CollectionExample { public static void main(String[] args) { List<Developers> developers = new ArrayList<>(Arrays.asList( new Developers("Bjarne", "C++", "M", 6000), new Developers("Tugrul", "Java", "M", 4500), new Developers("James", "Java", "M", 9000), new Developers("Ada", "Ada", "F", 6000), new Developers("Diane", "C++", "F", 4000), new Developers("Bill", ".NOT", "M", 2000), new Developers("Rebecca", "C++", "F", 8500), new Developers("Laura", "Java", "F", 7500), new Developers("Adam", "Java", "M", 9800), new Developers("Jane", "C++", "F", 7500), new Developers("Mark", "Java", "M", 7500) ) ); System.out.println("\n\nList of Developers"); System.out.println("Name\tLanguage\tGender\tSalary"); developers.forEach(dev -> System.out.println(dev.getName() + '\t' + dev.getLanguage() + '\t' + '\t' + dev.getGender() + '\t' + dev.getSalary())); //Filter developers by salary Predicate<Developers> salaryFilter = dev -> (dev.getSalary() >= 4500); //Filter developers by gender Predicate<Developers> genderFilter = dev -> (dev.getGender().equals("M")); //Filter developers by language Predicate<Developers> languageFilter = dev -> (dev.getLanguage().equals("Java")); System.out.println("\n\nList of Developers - Sort by Male Java Developers earn 4500 and more"); System.out.println("Name\tLanguage\tGender\tSalary"); //Apply filter developers.stream() .filter(salaryFilter) .filter(genderFilter) .filter(languageFilter) .forEach(dev -> System.out.println(dev.getName() + '\t' + dev.getLanguage() + '\t' + '\t' + dev.getGender() + '\t' + dev.getSalary())); System.out.println("\n\nList of Developers - Limited to 3 of them"); System.out.println("Name\tLanguage\tGender\tSalary"); //Apply filter developers.stream() .limit(3) .forEach(dev -> System.out.println(dev.getName() + '\t' + dev.getLanguage() + '\t' + '\t' + dev.getGender() + '\t' + dev.getSalary())); System.out.println("\n\nList of Developers - Sorted by Name Ascending"); System.out.println("Name\tLanguage\tGender\tSalary"); //Apply filter developers.stream() .sorted((dev1, dev2) -> (dev1.getName().compareTo(dev2.getName()))) .forEach(dev -> System.out.println(dev.getName() + '\t' + dev.getLanguage() + '\t' + '\t' + dev.getGender() + '\t' + dev.getSalary())); System.out.println("\n\nList of Developers - Sorted by Salary Ascending"); System.out.println("Name\tLanguage\tGender\tSalary"); //Apply filter developers.stream() .sorted((dev1, dev2) -> (dev1.getSalary() - dev2.getSalary())) .forEach(dev -> System.out.println(dev.getName() + '\t' + dev.getLanguage() + '\t' + '\t' + dev.getGender() + '\t' + dev.getSalary())); System.out.println("\n\nThe Developer earning the lowest salary"); System.out.println("Name\tLanguage\tGender\tSalary"); //Apply filter Developers developerMin = developers.stream() .min((dev1, dev2) -> (dev1.getSalary() - dev2.getSalary())) .get(); System.out.println(developerMin.getName() + '\t' + developerMin.getLanguage() + '\t' + '\t' + developerMin.getGender() + '\t' + developerMin.getSalary()); System.out.println("\n\nThe Developer earning the highest salary"); System.out.println("Name\tLanguage\tGender\tSalary"); //Apply filter Developers developerMax = developers.stream() .max((dev1, dev2) -> (dev1.getSalary() - dev2.getSalary())) .get(); System.out.println(developerMax.getName() + '\t' + developerMax.getLanguage() + '\t' + '\t' + developerMax.getGender() + '\t' + developerMax.getSalary()); } } class Developers { private String name; private String language; private String gender; private int salary; public Developers(String name, String language, String gender, int salary) { this.name = name; this.language = language; this.gender = gender; this.salary = salary; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getLanguage() { return language; } public void setLanguage(String language) { this.language = language; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } }
The output
List of Developers Name Language Gender Salary Bjarne C++ M 6000 Tugrul Java M 4500 James Java M 9000 Ada Ada F 6000 Diane C++ F 4000 Bill .NOT M 2000 Rebecca C++ F 8500 Laura Java F 7500 Adam Java M 9800 Jane C++ F 7500 Mark Java M 7500 List of Developers - Sort by Male Java Developers earn 4500 and more Name Language Gender Salary Tugrul Java M 4500 James Java M 9000 Adam Java M 9800 Mark Java M 7500 List of Developers - Limited to 3 of them Name Language Gender Salary Bjarne C++ M 6000 Tugrul Java M 4500 James Java M 9000 List of Developers - Sorted by Name Ascending Name Language Gender Salary Ada Ada F 6000 Adam Java M 9800 Bill .NOT M 2000 Bjarne C++ M 6000 Diane C++ F 4000 James Java M 9000 Jane C++ F 7500 Laura Java F 7500 Mark Java M 7500 Rebecca C++ F 8500 Tugrul Java M 4500 List of Developers - Sorted by Salary Ascending Name Language Gender Salary Bill .NOT M 2000 Diane C++ F 4000 Tugrul Java M 4500 Bjarne C++ M 6000 Ada Ada F 6000 Laura Java F 7500 Jane C++ F 7500 Mark Java M 7500 Rebecca C++ F 8500 James Java M 9000 Adam Java M 9800 The Developer earning the lowest salary Name Language Gender Salary Bill .NOT M 2000 The Developer earning the highest salary Name Language Gender Salary Adam Java M 9800