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());
