Java 8 List 根据字段排序概述(有空值)
在Java 我们可以使用lambda表达式和Streamm API对List进行排序。当我们需要根据某个字段对List进行排序时,可以使用Comparator接口来定义排序规则。
这篇文章将教你如何使用Java 对List进行排序,并处理字段为空的情况。
流程以下是整个过程的步骤概述:
接下来,我们将详细介绍每个步骤的具体操作。
步骤1:创建一个包含对象的列表首先,我们需要创建一个包含对象的列表。假设我们有一个包含name和age字段的Person对象。我们将创建一个Person列表并填写一些示例数据。
List<Person> personList = new ArrayList<>();personList.add(new Person("Alice", 25));personList.add(new Person("Bob", 30));personList.add(new Person("Charlie", 20));personList.add(new Person("David", null));
步骤2:实现Comparator接口定义排序规则接下来,我们需要实现一个Comparator接口来定义排序规则。在这里,我们将对age字段进行排序,并处理空字段。
Comparator<Person> ageComparator = Comparator.comparing(Person::getAge, Comparator.nullsLast(Comparator.naturalOrder()));
我们使用了上述代码Comparator.comparing
按age字段定义方法进行排序。Comparator.nullsLast
该方法用于处理字段为空的情况,以确保空值排在最后。Comparator.naturalOrder
该方法规定了自然排序顺序。
最后,我们使用Lambda表达式和Stream API对列表进行排序。
List<Person> sortedList = personList.stream() .sorted(ageComparator) .collect(Collectors.toList());
在上述代码中,我们使用Streamsorted
该方法对列表进行排序,并将之前定义的agecomparator输入。最后,我们使用它collect
该方法将排序后的元素收集到新的List中。
import java.util.ArrayList;import java.util.Comparator;import java.util.List;import java.util.stream.Collectors;class Person { private String name; private Integer age; public Person(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public Integer getAge() { return age; }}public class Main { public static void main(String[] args) { List<Person> personList = new ArrayList<>(); personList.add(new Person("Alice", 25)); personList.add(new Person("Bob", 30)); personList.add(new Person("Charlie", 20)); personList.add(new Person("David", null)); Comparator<Person> ageComparator = Comparator.comparing(Person::getAge, Comparator.nullsLast(Comparator.naturalOrder())); List<Person> sortedList = personList.stream() .sorted(ageComparator) .collect(Collectors.toList()); sortedList.forEach(person -> System.out.println(person.getName() + ": " + person.getAge())); }}
序列图以下是一个序列图,展示了整个排序过程:
sequenceDiagram autonumber participant App participant Person participant Comparator participant Stream App ->> Person: 创建Person对象列表 App ->> Comparator: 创建agecomparator App ->> Stream: 对列表进行排序 Stream ->> Comparator: 使用agecomparator进行排序 Stream ->> App: 返回排序后的列表
旅行图以下是一张旅行图,展示了整个排序过程:
journey title Java 8 List 按字段排序(有空值) section 创建Person对象列表 App->Person: 创建Person对象列表 section 创建排序规则 App->Comparator: 创建agecomparator section 对列表进行排序 App->Stream: 对列表进行排序 Stream->Comparator: 使用agecomparator进行排序 Stream->App: 返回排序后的列表 section 打印排序后的列表 App->System.out: 打印排序后的列表
