2010-07-04 4 views
2

У меня есть ArrayList из String []:Сортировка ArrayList из String []

ArrayList < String []> MyStuff = новый ArrayList < String []>();

Я хочу отсортировать их по возрастанию. Пример:

MyStuff = {[ "этот", "является", "элемент", "один"], [ "этот", "является", "элемент", "два"], [ "пункт"], [ "предмет", "три"]}

должны стать:

MyStuff = {[ "пункт"], [ "деталь", "три"], ["this", "is", "item", "one"], ["this", "is", "item", "two"]}

Для массивов одинаковой длины порядок не имеет значения.

Edit:

Java версия компилятора: Javac 1.6.0_20

ошибка, я столкнулся с помощью @ кода sepp2k в: http://pastie.org/private/ienpdtj0ft6czw6nboeva

+1

мне еще нужно, чтобы увидеть код, который вы пытаетесь скомпилировать. Похоже, вы помещали вызов в сортировку где-нибудь, где выражения не являются синтаксически действительными (например, вне определения метода). – sepp2k

+1

Похоже, вы где-то пропускаете какую-то пунктуацию. – casablanca

+0

Я помещал код в объявлении моего класса, но вернул его сразу после моего импорта, сократив его до 3 ошибок: http://pastie.org/1029778 – curiousgeorge

ответ

12

Использование Collections.sort с Comparator, который сравнивает длину.

Collections.sort(mystuff, new Comparator<String[]>() { 
    public int compare(String[] x, String[] y) { 
     if(x.length < y.length) { 
      return -1; 
     } else if(x.length == y.length) { 
      return 0; 
     } else { 
      return 1; 
     } 
    } 
}); 

Edit: Вот полный класс, который компилируется и выполняется без ошибок (и показывает правильный результат):

import java.util.*; 

public class Bla {       
    public static void main(String[] args) { 
     // Create list 
     List<String[]> mystuff = new ArrayList<String[]>(); 
     mystuff.add(new String[] {"lilu", "lolo"}); 
     mystuff.add(new String[] {"lala"}); 
     mystuff.add(new String[] {"lila", "blabla", "pfirsichkuchen"}); 

     // Sort list 
     Collections.sort(mystuff, new Comparator<String[]>() { 
      public int compare(String[] x, String[] y) { 
       if(x.length < y.length) { 
        return -1; 
       } else if(x.length == y.length) { 
        return 0; 
       } else { 
        return 1; 
       } 
      } 
     }); 

     // Output list 
     for(String[] strs : mystuff) { 
      System.out.println(Arrays.toString(strs)); 
     } 
    } 
} 
+0

Yikes, мой компилятор бросает кучу ошибок. Это потому, что я импортирую: import java.util. *; – curiousgeorge

+0

@ khan0: Это не потому, что вы импортируете 'java.util. *'. Хорошо. Измените свой вопрос, чтобы показать весь код, который вызывает ошибку и сообщение об ошибке. И ваша версия java. – sepp2k

+1

Ummm ... (потенциально) создание двух экземпляров 'Integer', так что вы можете использовать метод compareTo, кажется немного расточительным. –

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