• Java的stream流多个字段排序


    1、第一种是固定多个字段排序 

    1. import java.util.Arrays;
    2. import java.util.Comparator;
    3. import java.util.List;
    4. import java.util.stream.Collectors;
    5. class Person {
    6. String name;
    7. int age;
    8. double salary;
    9. public Person(String name, int age, double salary) {
    10. this.name = name;
    11. this.age = age;
    12. this.salary = salary;
    13. }
    14. @Override
    15. public String toString() {
    16. return "Person{" +
    17. "name='" + name + '\'' +
    18. ", age=" + age +
    19. ", salary=" + salary +
    20. '}';
    21. }
    22. }
    23. public class Main {
    24. public static void main(String[] args) {
    25. List people = Arrays.asList(
    26. new Person("张三", 30, 5000),
    27. new Person("李四", 25, 6000),
    28. new Person("王五", 35, 4000)
    29. );
    30. List sortedPeople = people.stream()
    31. .sorted(Comparator.comparing(Person::getName).thenComparing(Person::getAge).thenComparing(Person::getSalary))
    32. .collect(Collectors.toList());
    33. sortedPeople.forEach(System.out::println);
    34. }
    35. }

    2、第二种动态字段进行排序 

    1. import java.util.Arrays;
    2. import java.util.Comparator;
    3. import java.util.List;
    4. import java.util.stream.Collectors;
    5. class Person {
    6. String name;
    7. int age;
    8. double salary;
    9. public Person(String name, int age, double salary) {
    10. this.name = name;
    11. this.age = age;
    12. this.salary = salary;
    13. }
    14. @Override
    15. public String toString() {
    16. return "Person{" +
    17. "name='" + name + '\'' +
    18. ", age=" + age +
    19. ", salary=" + salary +
    20. '}';
    21. }
    22. }
    23. public class Main {
    24. public static void main(String[] args) {
    25. List people = Arrays.asList(
    26. new Person("张三", 30, 5000),
    27. new Person("李四", 25, 6000),
    28. new Person("王五", 35, 4000)
    29. );
    30. // 动态传入排序字段
    31. String sortField = "age"; // 可以修改为"name"或"salary"
    32. List sortedPeople = people.stream()
    33. .sorted(getComparator(sortField))
    34. .collect(Collectors.toList());
    35. System.out.println(sortedPeople);
    36. }
    37. private static Comparator getComparator(String sortField) {
    38. switch (sortField) {
    39. case "name":
    40. return Comparator.comparing(Person::getName);
    41. case "age":
    42. return Comparator.comparingInt(Person::getAge);
    43. case "salary":
    44. return Comparator.comparingDouble(Person::getSalary);
    45. default:
    46. throw new IllegalArgumentException("Invalid sort field: " + sortField);
    47. }
    48. }
    49. }

  • 相关阅读:
    【前端设计模式】之建造者模式
    TPS54331DDAR —— DCDC降压设计12V 至 5.00V @ 3A【电感电容选择计算】
    第01章 第01章 数据结构基础和算法简介
    Arduino 拓展班DMP280的代码问题
    如何写一份全面、易读的交互说明文档
    Day41 力扣动态规划 :121. 买卖股票的最佳时机|122.买卖股票的最佳时机II
    网络爬虫-----http和https的请求与响应原理
    C++之<set和map模拟实现>
    Spring Cloud Netflix 之 Eureka
    【C语言】错题本(3)
  • 原文地址:https://blog.csdn.net/tanqingfu1/article/details/133899698