在现代Java开发中,Java排序流(Stream排序)已成为处理集合数据的强大工具。自Java 8引入Java Stream API以来,开发者可以用更简洁、函数式的方式对数据进行过滤、映射和排序等操作。本教程将从零开始,手把手教你如何使用Stream进行排序,即使你是编程小白也能轻松上手!
Stream是Java 8新增的用于处理集合数据的抽象概念。它不是数据结构,而是一种支持顺序和并行聚合操作的数据处理管道。通过Stream,你可以像写SQL一样对集合进行声明式操作。
最简单的排序方式是使用sorted()方法。它默认按自然顺序排序(升序)。
import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;public class StreamSortExample { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 9); List<Integer> sortedNumbers = numbers.stream() .sorted() .collect(Collectors.toList()); System.out.println(sortedNumbers); // 输出: [1, 2, 5, 8, 9] }} 很多时候我们需要按特定规则排序,比如降序或按对象属性排序。这时可以传入一个Comparator比较器。
List<Integer> descending = numbers.stream() .sorted(Collections.reverseOrder()) .collect(Collectors.toList());// 或者使用 lambda 表达式List<Integer> descending2 = numbers.stream() .sorted((a, b) -> b - a) .collect(Collectors.toList()); 假设我们有一个Person类,包含name和age字段:
class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } // getter 方法省略... public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return name + "(" + age + ")"; }}// 按年龄升序排序List<Person> people = Arrays.asList( new Person("Alice", 30), new Person("Bob", 25), new Person("Charlie", 35));List<Person> sortedByAge = people.stream() .sorted(Comparator.comparing(Person::getAge)) .collect(Collectors.toList());System.out.println(sortedByAge); // 输出: [Bob(25), Alice(30), Charlie(35)] 当需要先按一个字段排序,再按另一个字段排序时,可以使用thenComparing()方法。
// 先按年龄升序,年龄相同时按姓名升序List<Person> multiSorted = people.stream() .sorted(Comparator.comparing(Person::getAge) .thenComparing(Person::getName)) .collect(Collectors.toList()); Comparator.nullsFirst()或Comparator.nullsLast()。通过本教程,你已经掌握了Java流式排序的核心用法。无论是简单数字排序、自定义对象排序,还是多级排序,Stream API都能让你的代码更简洁、易读。记住,熟练运用Java排序流不仅能提升开发效率,还能写出更具函数式风格的优雅代码。
赶快动手试试吧!创建自己的数据集,尝试不同的排序组合,你会发现Java Stream API的无限可能。
本文由主机测评网于2025-12-11发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125988.html