Java Stream 集合多条件排序

在Java编程中,我们经常需要对集合进行排序。Java 8引入了Stream API,它提供了一种更简洁、更强大的方式处理集合。本文将介绍如何使用Java Stream API对集合进行多条件排序。

旅行图

在开始之前,让我们通过一个旅行图来了解多条件排序的过程:

journey
    title 多条件排序流程
    section 定义集合
      order: 定义一个集合
    section 转换为Stream
      order: 将集合转换为Stream
    section 添加排序条件
      order: 添加一个或多个排序条件
    section 收集结果
      order: 将排序后的Stream转换回集合

类图

接下来,我们定义一个简单的类图来表示我们的数据结构:

classDiagram
    class Person {
      +String name
      +int age
    }
    class SortExample {
      +List<Person> people
      +void sortPeople()
    }

示例代码

假设我们有一个Person类,包含nameage两个属性。我们想要根据年龄和姓名对一个Person列表进行排序。

import java.util.*;

public class SortExample {
    private List<Person> people;

    public SortExample(List<Person> people) {
        this.people = people;
    }

    public void sortPeople() {
        List<Person> sortedPeople = people.stream()
            .sorted(Comparator.comparingInt(Person::getAge).thenComparing(Person::getName))
            .collect(Collectors.toList());

        sortedPeople.forEach(person -> System.out.println(person.getName() + " - " + person.getAge()));
    }

    public static void main(String[] args) {
        List<Person> people = new ArrayList<>();
        people.add(new Person("Alice", 30));
        people.add(new Person("Bob", 25));
        people.add(new Person("Charlie", 30));
        people.add(new Person("David", 20));

        SortExample sortExample = new SortExample(people);
        sortExample.sortPeople();
    }
}

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

解释

  1. 定义集合:首先,我们定义了一个Person列表。
  2. 转换为Stream:使用stream()方法将集合转换为Stream。
  3. 添加排序条件:使用sorted()方法和Comparator.comparingInt()来添加排序条件。首先根据年龄排序,如果年龄相同,则根据姓名排序。
  4. 收集结果:使用collect(Collectors.toList())将排序后的Stream转换回集合。

结论

Java Stream API为集合排序提供了一种简洁而强大的方法。通过使用Comparator.comparingInt()thenComparing(),我们可以轻松地实现多条件排序。这使得代码更易于阅读和维护。希望本文能帮助你更好地理解如何在Java中使用Stream API进行多条件排序。