</>

Technology

Core Java

Difficulty

Intermediate

Interview Question

Given a list of employees, how do you find the highest paid using Java 8 Streams?

Answer

Find Highest Paid Employee Using Java 8 Streams

Employee Class

Java
public class Employee {
    private String name;
    private String department;
    private double salary;
    private String role;
    private int yearsOfExp;

    public Employee(String name, String department, double salary, String role, int exp) {
        this.name = name; this.department = department;
        this.salary = salary; this.role = role; this.yearsOfExp = exp;
    }
    // Getters omitted for brevity
}

Test Data

Java
List<Employee> employees = Arrays.asList(
    new Employee("Alice",   "QA",      95000, "SDET",    5),
    new Employee("Bob",     "Dev",     120000, "Engineer", 8),
    new Employee("Charlie", "QA",      85000, "SDET",    3),
    new Employee("Diana",   "Dev",     135000, "Lead",    10),
    new Employee("Eve",     "QA",      110000, "Manager", 7),
    new Employee("Frank",   "Dev",     90000, "Engineer", 4)
);

Find Highest Paid Overall

Java
// Using max() — most efficient
Optional<Employee> highestPaid = employees.stream()
    .max(Comparator.comparingDouble(Employee::getSalary));

highestPaid.ifPresent(e ->
    System.out.println("Highest paid: " + e.getName() + " - $" + e.getSalary()));
// "Highest paid: Diana - $135000.0"

Find Highest Paid per Department

Java
// Group by department, find max salary in each
Map<String, Optional<Employee>> highestPerDept = employees.stream()
    .collect(Collectors.groupingBy(
        Employee::getDepartment,
        Collectors.maxBy(Comparator.comparingDouble(Employee::getSalary))
    ));

highestPerDept.forEach((dept, emp) ->
    emp.ifPresent(e -> System.out.println(dept + ": " + e.getName() + " $" + e.getSalary())));
// Dev: Diana $135000.0
// QA: Eve $110000.0

Top 3 Highest Paid

Java
List<Employee> top3 = employees.stream()
    .sorted(Comparator.comparingDouble(Employee::getSalary).reversed())
    .limit(3)
    .collect(Collectors.toList());

top3.forEach(e -> System.out.println(e.getName() + ": $" + e.getSalary()));
// Diana: $135000.0, Bob: $120000.0, Eve: $110000.0

Average Salary per Department

Java
Map<String, Double> avgByDept = employees.stream()
    .collect(Collectors.groupingBy(
        Employee::getDepartment,
        Collectors.averagingDouble(Employee::getSalary)
    ));

avgByDept.forEach((dept, avg) ->
    System.out.printf("%s avg: $%.0f%n", dept, avg));
// Dev avg: $115000, QA avg: $96667

Employees Earning Above Average

Java
double avg = employees.stream()
    .mapToDouble(Employee::getSalary)
    .average()
    .orElse(0);

List<Employee> aboveAvg = employees.stream()
    .filter(e -> e.getSalary() > avg)
    .sorted(Comparator.comparingDouble(Employee::getSalary).reversed())
    .collect(Collectors.toList());

System.out.println("Average: $" + avg);
aboveAvg.forEach(e -> System.out.println(e.getName() + ": $" + e.getSalary()));

Count per Department

Java
Map<String, Long> countByDept = employees.stream()
    .collect(Collectors.groupingBy(Employee::getDepartment, Collectors.counting()));
// {QA=3, Dev=3}

Salary Statistics

Java
DoubleSummaryStatistics stats = employees.stream()
    .mapToDouble(Employee::getSalary)
    .summaryStatistics();

System.out.println("Max: $"   + stats.getMax());
System.out.println("Min: $"   + stats.getMin());
System.out.println("Avg: $"   + stats.getAverage());
System.out.println("Sum: $"   + stats.getSum());
System.out.println("Count: "  + stats.getCount());

Follow AutomateQA

Related Topics