根据int数组

时间:2016-09-05 02:35:29

标签: java arrays sorting arraylist

ArrayList<int[]> segment = new Arraylist<int[]>();
segment.add(new int[]{2,3,1});
segment.add(new int[]{2,1,1});
segment.add(new int[]{1,1,1});
segment.add(new int[]{2,4,1});
segment.add(new int[]{3,3,1});

我想要做的是根据每个数组的第一个元素对此ArrayLists进行排序,如果元素相同,则根据数组/数组的第二个元素进行排序

例如,上面的代码行应修改为, (1,1,1) (2,1,1) (2,3,1-) (2,4,1) (3,3,1)

这是我迄今为止解决这个问题的方法,

    public static void SortSegment(ArrayList<int[]> segment){
        Collections.sort(segment, new Comparator<int[]>() {
             public int compare(int[] a, int[] b) {
                  return (a[0] - b[0]);
             }
        });
    }

这段代码根据每个int数组的第一个元素对int数组的arraylist进行排序。 我如何修改它以适用于第一个元素相同的情况,因此它考虑了第二个元素?

感谢。

3 个答案:

答案 0 :(得分:1)

{8}接口在Java 8中有一些有用的实用程序(默认)方法,可用于自定义排序:

Comparator

答案 1 :(得分:0)

试试这个:

segments.sort(Comparator.comparingInt(a -> a[0])
    .thenComparing(a -> a[1])
    .thenComparing(a -> a[2]));

答案 2 :(得分:0)

试试这个

if(a[0] - b[0]==0) //Like the first row of the matrix if so, we proceed to the next to know which is lower

代码完成

Collections.sort(segment, new Comparator<int[]>() {
         public int compare(int[] a, int[] b) {
              if(a[0] - b[0]==0) //if equals
              {
                  return a[1]-b[1];//recompare 
              }
              else
                  return a[0]-b[0];
         }
    });