根据文档,
然后比较
默认 > 比较器 thenComparing(Function keyExtractor)
返回一个字典顺序比较器,其中包含提取可比较排序键的函数。
因此,以下代码的输出应该是“a : 1”、“a : 12”、“a : 4”。但是,结果列表是按升序排列的。
怎么会呢?我是否误解了文档?
(
s
属性只是有一个初始排序键,以便可以应用thenComparing)
import java.util.*;
public class MyClass {
public static void main(String args[]) {
List<Container> list = new ArrayList<>();
list.add(new Container("a", 4));
list.add(new Container("a", 12));
list.add(new Container("a", 1));
list.sort(Comparator.comparing(Container::getS)
.thenComparing(Container::getX)
);
for (Container c : list) {
System.out.println(c.getS() + " : " + c.getX());
}
}
public static class Container {
private String s;
private Integer x;
public Container(String s, Integer x) {
this.s = s;
this.x = x;
}
public Integer getX() {
return this.x;
}
public String getS() {
return this.s;
}
}
}
词典顺序不仅仅是字母顺序。它也可以应用于数字,在这种情况下它是数字顺序。正如在线整数序列百科全书中所述:
应用于数字时,字典顺序是递增的数字顺序
因此,
thenComparing
在 12 之前订购 4 是完全正确的,因为您正在比较 Integer
实例。