Java中使用lambda表达式自定义排序

1. 自定义数组排序

  1. 对于一维数组,通常使用Arrays.sort()(默认升序)

    int[] nums = {3, 1, 4, 2};
    Arrays.sort(nums);
    
  2. 对于二维数组,可以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;})
);
posted @ 2024-08-17 15:48  Frank23  阅读(680)  评论(0)    收藏  举报