📜  priorityqueue 中的 java lambda 表达式 - Java (1)

📅  最后修改于: 2023-12-03 15:18:42.251000             🧑  作者: Mango

Priority Queue 中的 Java Lambda 表达式

Java 中的 PriorityQueue 是一个能够自动按照元素的优先级进行排序的队列。这种排序方式需要给每个元素定义一个比较器 (Comparator),在使用过程中非常常见。

在 Java 8 中,引入了 Lambda 表达式,可以让我们在定义比较器时更加便捷。

Lambda 表达式简介

首先,Lambda 表达式是 Java 8 引入的一个语法糖,用来简化匿名内部类的定义。下面是一个最简单的 Lambda 表达式例子:

() -> System.out.println("Hello, world!");

其中 () -> 表示这是一个没有参数的 Lambda 表达式,System.out.println("Hello, world!") 则表示 Lambda 表达式要执行的代码。我们还可以将 Lambda 表达式赋值给一个变量,例如:

Runnable helloWorld = () -> System.out.println("Hello, world!");
helloWorld.run();

这段代码会打印出 Hello, world!

Priority Queue 与 Lambda 表达式

回到 PriorityQueue,我们通常需要为它定义一个比较器。在 Java 8 之前,我们通常需要这样写:

PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return Integer.compare(o1 % 10, o2 % 10);
    }
});
queue.offer(1);
queue.offer(10);
queue.offer(20);
while (!queue.isEmpty()) {
    System.out.println(queue.poll());
}

这段代码使用匿名内部类实现了一个比较器,它将元素按照个位数大小进行排序。在 Java 8 中,我们可以使用 Lambda 表达式来实现同样的功能:

PriorityQueue<Integer> queue = new PriorityQueue<>((o1, o2) -> Integer.compare(o1 % 10, o2 % 10));
queue.offer(1);
queue.offer(10);
queue.offer(20);
while (!queue.isEmpty()) {
    System.out.println(queue.poll());
}

这段代码中,我们使用了 Lambda 表达式 (o1, o2) -> Integer.compare(o1 % 10, o2 % 10) 来定义了一个比较器,它也将元素按照个位数大小进行排序。

结论

Lambda 表达式使得 Java 中定义比较器更加方便,同时可以让代码更加简洁易懂。在使用 PriorityQueue 或其他需要比较器的 API 时,我们可以使用 Lambda 表达式来实现自定义的排序方式。