然后比较似乎不是字典顺序的,尽管文档这么说

问题描述 投票:0回答:1

根据文档

然后比较

默认 > 比较器 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;
        }
    }
}
java comparator
1个回答
0
投票

词典顺序不仅仅是字母顺序。它也可以应用于数字,在这种情况下它是数字顺序。正如在线整数序列百科全书中所述:

应用于数字时,字典顺序是递增的数字顺序

因此,

thenComparing
在 12 之前订购 4 是完全正确的,因为您正在比较
Integer
实例。

© www.soinside.com 2019 - 2024. All rights reserved.