2013-03-21 6 views
0

В настоящее время у меня есть ArrayList из int[]. int[] имеет 5 элементов. Я хочу, чтобы отсортировать этот ArrayList на основе 2-го и 4-го индексов моего int[]. Как это сделать на Java?Сортировка ArrayList из Int [] по нескольким индексам

+4

Можете вы точно объяснить, что именно вы пытаетесь сделать? Что означает «на основе 2-го и 4-го индексов»? – Jeffrey

+0

Так, например, если бы у меня был следующий список массивов [1,4,6,8,9] [1,3,6,7,8] [1,4,6,7,9], заказ был бы [1 , 3,6,7,8] [1,4,6,7,9] [1,4,6,8,9], т.е. я сначала сортирую по второму индексу, и если это то же самое, то сортировка по 4-му index ... – user1950055

ответ

2
package com.sandbox; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.List; 

public class Sandbox { 

    public static void main(String[] args) { 
     List<int[]> list = new ArrayList<int[]>(); 
     list.add(new int[]{1, 4, 6, 8, 9}); 
     list.add(new int[]{1,3,6,7,8}); 
     list.add(new int[]{1,4,6,7,9}); 
     Collections.sort(list, new Comparator<int[]>() { 
      public int compare(int[] o1, int[] o2) { 
       int compare = Integer.compare(o1[1], o2[1]); 
       //if they're equal on this element then compare the next element 
       return compare == 0 ? Integer.compare(o1[3], o2[3]) : compare; 
      } 
     }); 
     for (int[] ints : list) { 
      System.out.println(Arrays.toString(ints)); 
     } 
    } 
} 

Это выход:

[1, 3, 6, 7, 8] [1, 4, 6, 7, 9] [1, 4, 6, 8 , 9]

+0

Ahh блестящий спасибо большое! ... как бы я продлить это, если бы я хотел сортировать по ряду параметризованных индексов, то есть не обязательно 2 и 4? объявить конструктор? – user1950055

+0

Это действительно зависит от того, как вы собираетесь их пропускать. Но если бы я догадался, я бы извлек «Comparator» в свой класс и предоставил ему конструктор, на котором вы передадите индексы, которые хотите Сортировать по. –

+0

Я не могу назвать Integer.compare()? – user1950055

0

Вам нужен собственный компаратор, как этот

class IntArrayComparator implements Comparator<int[]> { 
     private final int[] ai; 

     IntArrayComparator(int[] ai) { 
      this.ai = ai; 
     } 

     @Override 
     public int compare(int[] a1, int[] a2) { 
      for (int i : ai) { 
       int c = Integer.compare(a1[i], a2[i]); 
       if (c != 0) { 
        return c; 
       } 
      } 
      return 0; 
     } 
    } 

отметить, что Integer.compare (целое, целое) я s добавлено в Java 7, в более ранних версиях используйте

int c = (a1[i] < a2[i]) ? -1 : a1[i] == a2[i] ? 0 : 1; 
+0

Ahh благодарит только что это реализовано, но я не могу сказать, что Integer.compare ... любая идея почему? – user1950055

+0

С 1,7 только –

Смежные вопросы