如何使TreeMap与数组一起使用?

aun*_*low 5 java arrays lambda treemap java-8

类似的问题请参阅:如何使HashMap与数组一起使用?

但我需要TreeMap ((int key1, int key2) -> String),key1然后比较key2.

我的解决方案是:

    Map<int[], String> map = new TreeMap<>(Comparator.
            <int[]>comparingInt(key -> key[0]).thenComparingInt(key -> key[1]));
Run Code Online (Sandbox Code Playgroud)

但是当我需要时((int key1, int key2, int key3) -> String,我必须写更多.

有没有办法为任意长度的数组生成Comparator?

Eug*_*ene 10

从java-9开始,这可以通过以下方式大大简化:

 TreeMap<int[], String> map = new TreeMap<>(Arrays::compare);
Run Code Online (Sandbox Code Playgroud)


Ria*_*Nel 6

带循环的比较器应该可以解决问题.如果我理解你的要求,那就是这样的.我应该提到它假设所有键都具有相同的长度.

    Map<int[], String> treeMap = new TreeMap<>((o1, o2) -> {
        for (int i = 0; i < o1.length; i++) {
            if (o1[i] > o2[i]) {
                return 1;
            } else if (o1[i] < o2[i]) {
                return -1;
            }
        }

        return 0;
    });
Run Code Online (Sandbox Code Playgroud)

  • @Obicere,如果你这样做,你打破了对称性要求.如果第一个数组较长,则应返回"+ 1",否则返回"-1"(或相反,取决于您的需要). (3认同)
  • 务必先检查长度.只有长度相等才进入循环.否则,+1. (2认同)