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

Ous*_* D. 3 java arrays sorting java-9

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

int[][] source = {
  {   3,  5,  6,  1},
  {   3,  3,  5, -6},
  {  -1, -3, -5, -6},
  { 124, 43, 55, -66}
};
Run Code Online (Sandbox Code Playgroud)

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

所以,结果,我希望它是:

[ [ -1, -3, -5,  -6], 
  [  3,  3,  5,  -6], 
  [  3,  5,  6,   1], 
  [124, 43, 55, -66] ]
Run Code Online (Sandbox Code Playgroud)

这个网站上的很多问题似乎只建议按每个数组的第一个元素或第二个,第三个等进行排序,但不考虑整个数组.

Ous*_* D. 6

从JDK9开始,有一个新的方法Arrays.compare,允许您按字典顺序比较两个给定的数组.

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

如果两个数组共享一个公共前缀,则字典比较是比较两个元素的结果,就像通过Integer.compare(int,int)一样,在相应数组中作为前缀长度的索引处.否则,一个数组是另一个数组的正确前缀,并且词典比较是比较两个数组长度的结果.

考虑到要修改source数组,然后使用Arrays.sort应该足够了:

Arrays.sort(source, Arrays::compare); 
Run Code Online (Sandbox Code Playgroud)

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

int[][] sorted = Arrays.stream(source)
                       .sorted(Arrays::compare)
                       .toArray(int[][]::new);
Run Code Online (Sandbox Code Playgroud)