Java集合排序

	@Test
	void contextLoads() {

		List<User> dataList = new ArrayList<>();
		dataList.add(new User("3", "user", "pwd", "3"));
		dataList.add(new User("3", "user", "pwd", "1"));
		dataList.add(new User("3", "user", "pwd", "2"));
		dataList.add(new User("1", "user", "pwd", "9"));

		/**
		 * 默认升序
		 */
		dataList = dataList.stream().sorted(Comparator.comparing(User::getId)).collect(Collectors.toList());
		dataList.forEach(System.err::println);

		/**
		 * id 降序 order 降序
		 */

		dataList = dataList.stream().sorted(Comparator.comparing(User::getId).thenComparing(User::getOrder))
				.collect(Collectors.toList());
		System.out.println("-------------------- id 升序 order 升序-----------------------");

		dataList.forEach(System.err::println);
		/**
		 * id 降序 order 升序
		 */
		dataList = dataList.stream()
				.sorted(Comparator.comparing(User::getId, Comparator.reverseOrder()).thenComparing(User::getOrder))
				.collect(Collectors.toList());
		dataList.forEach(System.err::println);

	}

### Java 集合排序的方法与示例 在 Java 开发中,集合排序是非常常见的操作之一。以下是几种常用的集合排序方法及其具体实现。 #### 使用 `Collections.sort` 进行单字段升序排序 对于简单的列表对象,可以使用 `Collections.sort` 方法配合自定义比较器完成排序。以下是一个基于整数列表的简单例子: ```java import java.util.*; public class SortExample { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(5, 3, 8, 1); Collections.sort(numbers); // 默认按自然顺序排序 System.out.println("Sorted Numbers: " + numbers); } } ``` 上述代码展示了如何对一个整型列表进行默认的升序排序[^1]。 --- #### 使用 Comparator 接口进行自定义排序 如果需要按照特定规则(如降序或其他逻辑)对集合进行排序,则可以通过实现 `Comparator` 接口来自定义排序行为。下面的例子演示了如何对字符串列表按长度进行排序: ```java import java.util.*; public class CustomSortExample { public static void main(String[] args) { List<String> words = Arrays.asList("apple", "banana", "pear"); // 自定义比较器:按字符串长度排序 words.sort(new Comparator<String>() { @Override public int compare(String o1, String o2) { return Integer.compare(o1.length(), o2.length()); } }); System.out.println("Words Sorted by Length: " + words); } } ``` 此代码片段实现了根据字符串长度从小到大排列的功能。 --- #### 利用 JDK 8 的 Lambda 表达式简化 Comparator 实现 从 Java 8 起,Lambda 表达式的引入使得编写简洁的比较器变得更加容易。以下是对用户对象按年龄字段进行升序排序的一个实例: ```java import java.util.*; import java.util.stream.Collectors; class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "User{name='" + name + "', age=" + age + "}"; } } public class Jdk8SortExample { public static void main(String[] args) { List<User> users = Arrays.asList( new User("Alice", 30), new User("Bob", 25), new User("Charlie", 35) ); // 使用 Lambda 表达式按年龄升序排序 users.sort(Comparator.comparing(User::getAge)); System.out.println("Users Sorted by Age (Ascending): " + users); // 或者按姓名字母顺序降序排序 users.sort(Comparator.comparing(User::getName).reversed()); System.out.println("Users Sorted by Name (Descending): " + users); } } ``` 这段代码不仅展示了如何利用 Lambda 表达式简化比较器书写过程,还提供了两种不同的排序方式——分别针对用户的年龄和名字[^2]。 --- #### 多字段排序的最佳实践 当需要依据多个条件对集合中的元素进行排序时,可采用链式调用来组合不同维度上的比较结果。例如,在处理包含员工信息的数据集时,先按部门再按薪资高低排序可能是必要的业务需求。下面是相应的实现方案: ```java import java.util.*; import java.util.stream.Collectors; class Employee { private String department; private double salary; public Employee(String department, double salary) { this.department = department; this.salary = salary; } public String getDepartment() { return department; } public double getSalary() { return salary; } @Override public String toString() { return "Employee{department='" + department + "', salary=" + salary + '}'; } } public class MultiFieldSortExample { public static void main(String[] args) { List<Employee> employees = Arrays.asList( new Employee("HR", 50000), new Employee("Engineering", 75000), new Employee("HR", 60000), new Employee("Engineering", 90000) ); // 按部门名称升序,同部门内按薪水降序排序 employees.sort(Comparator.comparing(Employee::getDepartment) .thenComparingDouble(Employee::getSalary, Comparator.reverseOrder())); System.out.println("Employees Sorted by Department and Salary: " + employees); } } ``` 这里通过连贯调用 `.thenComparing()` 方法完成了复杂的多级排序任务[^4]。 --- ### 总结 以上介绍了四种主要的 Java 集合排序方法,分别是基础的 `Collections.sort`、灵活的 `Comparator` 定义、现代化的 Lambda 表达式支持以及高级别的多字段联合排序技巧。每种方法都有其适用场景,开发者应根据实际情况选择最合适的工具和技术手段来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值