MST

星途 面试题库

面试题:Java Stream sorted自定义多条件排序实现

有一个Employee类,包含name(String类型)、salary(double类型)和department(String类型)属性。要求使用Java Stream的sorted方法,首先按department属性字典序排序,如果department相同,则按salary降序排序,最后如果salary也相同,则按name字典序升序排序,编写代码实现该功能并返回排序后的Employee集合。
27.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

class Employee {
    private String name;
    private double salary;
    private String department;

    public Employee(String name, double salary, String department) {
        this.name = name;
        this.salary = salary;
        this.department = department;
    }

    public String getName() {
        return name;
    }

    public double getSalary() {
        return salary;
    }

    public String getDepartment() {
        return department;
    }
}

public class EmployeeSorting {
    public static List<Employee> sortEmployees(List<Employee> employees) {
        return employees.stream()
               .sorted(Comparator.comparing(Employee::getDepartment)
                       .thenComparingDouble(Employee::getSalary).reversed()
                       .thenComparing(Employee::getName))
               .collect(Collectors.toList());
    }

    public static void main(String[] args) {
        List<Employee> employees = new ArrayList<>();
        employees.add(new Employee("Alice", 5000.0, "HR"));
        employees.add(new Employee("Bob", 6000.0, "IT"));
        employees.add(new Employee("Charlie", 6000.0, "IT"));
        employees.add(new Employee("David", 5000.0, "HR"));

        List<Employee> sortedEmployees = sortEmployees(employees);
        sortedEmployees.forEach(employee -> System.out.println(employee.getName() + " - " + employee.getSalary() + " - " + employee.getDepartment()));
    }
}