2015-12-23 3 views
1

У меня есть много списков, каждый список содержит 4 элемента всей строки. Теперь у меня есть Set<List>, в котором хранятся все перечисленные выше списки.Сортировка набора, содержащего список

Я хочу отсортировать набор на основе поля в списке.

например. list1=["x","2"], list2=["a","5"], list3=["g","1"] и set.add(list1), set.add(list2), set.add(list3).

Теперь я хочу отсортировать этот набор на основе 2-го поля в списке.

+0

Вы можете использовать TreeSet, как показано здесь http://stackoverflow.com/questions/4165832/sorting-values-of-set. –

+1

Вы можете использовать метод 'Collections.sort()', реализовав интерфейс 'Comparator' для дополнительного параметра. – Hemang

+0

есть разница между этим scenerio и моим. Treeset не работает в моем scenerio. –

ответ

0

Итак, вы, как это:

List<String> list1 = Arrays.asList("x", "2"); 
List<String> list2 = Arrays.asList("a", "5"); 
List<String> list3 = Arrays.asList("g", "1"); 

И один супер-лист

Set<List<String>> set = new HashSet<List<String>>(); 
set.add(list1); 
set.add(list2); 
set.add(list3); 

И вам нужен отсортированный список по второй строки:

List<List<String>> list = new ArrayList<List<String>>(set); 
    Collections.sort(list, new Comparator<List<String>>() { 

     @Override 
     public int compare(List<String> o1, List<String> o2) { 
      //Index 1 = second element 
      return o1.get(1).compareTo(o2.get(1)); 
     } 

    });  

Полный пример

Список list1 = Arrays.asList ("x", "2"); Список list2 = Arrays.asList ("a", "5"); Список list3 = Arrays.asList ("g", "1");

 Set<List<String>> set = new HashSet<List<String>>(); 
    set.add(list1); 
    set.add(list2); 
    set.add(list3); 

    List<List<String>> list = new ArrayList<List<String>>(set); 
    Collections.sort(list, new Comparator<List<String>>() { 

     @Override 
     public int compare(List<String> o1, List<String> o2) { 
      //Index 1 = second element 
      return o1.get(1).compareTo(o2.get(1)); 
     } 

    }); 
    for(List<String> li : list) { 
     System.out.println(li); 
    } 

Создает этот выход/сортировки:

[g, 1] 
[x, 2] 
[a, 5] 
+0

Почему бы не отсортированный набор? –

+0

@SergiyMedvynskyy это просто предположение, что набор уже на месте - комментарии к упомянутому вопросу TreeSet «не сработают», – Jan

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