sorted(Comparator.comparing
时间: 2023-11-02 19:01:54 浏览: 52
sorted(Comparator.comparing)是Java中用于自定义排序的方法之一。它可以通过指定一个lambda表达式或方法引用来定义排序的规则。lambda表达式指定了根据对象的某个属性进行比较,而方法引用则指定了根据对象的某个方法进行比较。比较器会根据指定的规则对集合中的元素进行排序。
在上面的引用中,给出了两种使用sorted(Comparator.comparing)方法进行自定义排序的示例。
方法一:
```
list = list.sort((a, b) -> {
Double d1 = a.getPQI();
Double d2 = b.getPQI();
return d1.compareTo(d2);
});
```
上述代码中,通过比较对象a和b的属性PQI的大小,实现了按照该属性从小到大进行排序。
方法二:
```
list = list.stream()
.sorted(Comparator.comparing(p -> p.getPQI()))
.collect(Collectors.toList());
```
上述代码使用了Java 8中的Stream API来进行排序。使用Comparator.comparing方法指定了根据对象的getPQI方法进行比较,并通过collect方法将排序结果收集到一个新的List中。
相关问题
list.stream().sorted(Comparator.comparing)
这是一个 Java 8 中对 List 排序的代码,其中使用了 Stream API 和 Comparator 接口的实现。具体来说,通过调用 List 对象的 stream() 方法将其转换为 Stream 对象,然后使用 sorted 方法对其进行排序。sorted 方法中传入一个 Comparator.comparing() 方法,该方法可以根据指定的属性对对象进行比较排序。具体使用时需要在 comparing 方法中指定比较的属性,例如:
```
List<Person> persons = new ArrayList<>();
persons.stream().sorted(Comparator.comparing(Person::getName));
```
这段代码将对 Person 对象集合按照姓名属性进行升序排序。
.sorted(Comparator.comparing(ModeValue::getValue, Comparator.nullsLast(Comparator.reverseOrder()))) 排序 失效
可能是因为 ModeValue 类没有实现 Comparable 接口,或者 Comparator.comparing() 方法中的比较器逻辑有误。请检查一下 ModeValue 类的定义和 Comparator 的使用。
如果 ModeValue 类没有实现 Comparable 接口,可以尝试在 Comparator.comparing() 方法中传入一个实现了 Comparator 接口的比较器对象,例如:
.sorted(Comparator.comparing(ModeValue::getValue, Comparator.nullsLast(Comparator.reverseOrder())))
改为:
.sorted(Comparator.comparing(ModeValue::getValue, Comparator.nullsLast((o1, o2) -> {
if (o1 == null && o2 == null) {
return 0;
}
if (o1 == null) {
return 1;
}
if (o2 == null) {
return -1;
}
return o2.compareTo(o1);
})))
其中,Lambda 表达式中的比较器逻辑是:如果 o1 和 o2 都为 null,则返回 0;如果 o1 为 null,则 o2 大于 o1,返回 1;如果 o2 为 null,则 o1 大于 o2,返回 -1;否则,比较 o1 和 o2 的大小。