Java中使用lambda表达式自定义排序
1. 自定义数组排序
-
对于一维数组,通常使用
Arrays.sort()(默认升序)int[] nums = {3, 1, 4, 2}; Arrays.sort(nums); -
对于二维数组,可以
lambda表达式实现特定的排序要求。- 在
Arrays.sort()的第二个参数中,写lambda表达式 - lambda表达式形如
(a, b) -> {return a - b;},其中a, b表示数组中的元素 - 升序/降序
a-b表示升序b-a表示降序
- 为了防止Integer的边界情况,可以用
Integer.compare(a[0], b[0])替代a-b
// 假设people[i]的第一个维度表示身高,第二维度表示体重 int[][] people = {{1, 2}, {3, 4}, {5, 6}}; // 希望首先按找身高降序排列,然后按体重升序排列 Arrays.sort(people, (a, b) -> { if (a[0] != b[0]) return b[0] - a[0]; else return a[1] - b[1]; }); - 在
2. 自定义优先队列排序
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
// 根据节点的val升序排列
// 小根堆(优先队列)
PriorityQueue<ListNode> pq = new PriorityQueue(
((o1, o2) -> {return o1.val - o2.val;})
);

浙公网安备 33010602011771号