java中Comparator.comparingLong(::)简写方式
时间: 2023-11-11 07:57:47 浏览: 241
在Java中,可以使用静态导入和方法引用的方式来简写Comparator.comparingLong(::)。具体如下所示:
import static java.util.Comparator.*;
...
Arrays.sort(numbers, comparingLong(Long::valueOf));
相关问题
Comparator.comparingLong Comparator.reversed
### Java Comparator `comparingLong` 和 `reversed` 的用法及区别
#### 使用场景
当处理数值类型的比较时,尤其是基本数据类型如 long 类型的数据,可以利用 `Comparator.comparingLong()` 方法来简化代码并提高性能。此方法允许直接传递一个提取键的函数作为参数[^1]。
对于需要反转排序顺序的情况,则可采用 `Comparator.reversed()` 来轻松改变已有比较器的行为方向。该特性使得开发者能够灵活调整列表或其他集合内元素排列的方式而无需重新定义整个比较逻辑[^2]。
#### 语法说明
- **`comparingLong`**: 接受一个返回 Long 值的方法引用或 lambda 表达式,并基于这些值创建一个新的 Comparator 实例。
```java
public static <T> Comparator<T> comparingLong(ToLongFunction<? super T> keyExtractor)
```
- **`reversed`**: 返回当前 comparator 对象的一个新实例,其自然排序被颠倒过来。
```java
default Comparator<T> reversed()
```
#### 示例代码展示
下面通过具体例子对比两者之间的差异:
```java
import java.util.*;
import java.util.function.*;
class Example {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 35)
);
// 正序按年龄升序排列
Collections.sort(people, Comparator.comparingLong(Person::getAge));
System.out.println("Sorted by age ascending:");
people.forEach(System.out::println);
// 反转之前的排序结果变为降序
Collections.sort(people, Comparator.comparingLong(Person::getAge).reversed());
System.out.println("\nReversed order (age descending):");
people.forEach(System.out::println);
}
}
class Person {
private String name;
private long age;
public Person(String name, long age) {
this.name = name;
this.age = age;
}
public long getAge() { return age; }
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
```
上述程序先按照人的年龄从小到大进行了正向排序;接着再调用了 `.reversed()` 将之前的结果翻转为了从大至小显示。
Comparator.comparingLong和Comparator.comparing的区别
Comparator.comparingLong和Comparator.comparing是Java中的两个用于比较器构造的静态方法。它们的区别在于比较的类型不同。
Comparator.comparingLong是用于比较long类型的方法。它接受一个Function参数,该参数将元素映射为long类型的值,然后根据这些值进行比较。比较器将按照升序排列元素。
示例代码如下:
```java
List<Long> numbers = Arrays.asList(3L, 1L, 2L, 5L, 4L);
numbers.sort(Comparator.comparingLong(number -> number));
System.out.println(numbers); // 输出 [1, 2, 3, 4, 5]
```
Comparator.comparing是用于比较任意类型的方法。它接受一个Function参数,该参数将元素映射为可比较的类型,然后根据这些值进行比较。比较器将按照升序排列元素。
示例代码如下:
```java
List<String> names = Arrays.asList("John", "Alice", "Bob", "David");
names.sort(Comparator.comparing(name -> name));
System.out.println(names); // 输出 [Alice, Bob, David, John]
```
总之,Comparator.comparingLong适用于long类型的比较,而Comparator.comparing适用于其他类型的比较。
阅读全文
相关推荐















