如何按字典顺序对二维数组排序?

时间:2018-12-22 21:06:53

标签: java arrays sorting java-9

假设我们有一个二维数组,如下所示:

int[][] source = {
  {   3,  5,  6,  1},
  {   3,  3,  5, -6},
  {  -1, -3, -5, -6},
  { 124, 43, 55, -66}
};

我们如何按字典顺序对多维数组source进行排序?

因此,我希望它是:

[ [ -1, -3, -5,  -6], 
  [  3,  3,  5,  -6], 
  [  3,  5,  6,   1], 
  [124, 43, 55, -66] ]

此站点上的许多问题似乎仅建议按每个数组的第一个元素或第二,第三等进行排序,而没有考虑整个数组。

1 个答案:

答案 0 :(得分:6)

从JDK9开始,有一个名为Arrays.compare的新方法,使您可以按字典顺序比较两个给定的数组。

文档中Arrays.compare的简短描述:

  

如果两个数组共享一个公共前缀,则词典   比较是比较两个元素的结果,就像   Integer.compare(int,int),在相应数组内的索引处   这是前缀长度。否则,一个数组是的适当前缀   另外,字典比较是比较   两个数组长度。

鉴于您要修改 source数组,然后使用Arrays.sort就足够了:

Arrays.sort(source, Arrays::compare); 

鉴于您想要一个 new 数组作为结果,那么我将采用流方式:

int[][] sorted = Arrays.stream(source)
                       .sorted(Arrays::compare)
                       .toArray(int[][]::new);