Сортировать список <List <String>> по значению списка - PullRequest
5 голосов
/ 15 февраля 2012

Я хочу отсортировать список по значениям в списке, он содержит три значения, первое значение целое, я преобразовываю это в строку, а два других значения имеют строковый характер, я хочу отсортировать список по первой строке.

List<List<String>> detail_View = new ArrayList<List<String>>();

List<String> fieldValues =fieldValues = new ArrayList<String>();
String aString = Integer.toString(ScreenId);
fieldValues.add(aString);
fieldValues.add(DisplayScreenName);
fieldValues.add(TableDisplay);

detail_View.add(fieldValues);

В приведенном выше коде я должен отсортировать значения списка по ScreenId

Ответы [ 4 ]

4 голосов
/ 15 февраля 2012

Вы должны использовать две концепции:

  1. Collections.sort утилита.
  2. Comparator<T> интерфейс.

Я напишу вашу решенную проблему следующим образом:

Сначала вы должны написать свой компаратор:

class CustomComparator implements Comparator<List<String>>
    {
        @Override
        public int compare(List<String> o1,
            List<String> o2)
        {
            String firstString_o1 = o1.get(0);
            String firstString_o2 = o2.get(0);
            return firstString_o1.compareTo(firstString_o2); 
        }
    }

тогда вы используете утилиту Collections следующим образом:

Collections.sort(detail_View, new CustomComparator());

после этих шагов ваш список:

List<List<String>> detail_View = new ArrayList<List<String>>();

будет отсортировано по первому индексу любого вложенного списка.

Подробнее об этой концепции см .:

  1. http://www.javadeveloper.co.in/java-example/java-comparator-example.html
  2. http://www.roseindia.net/java/java-tips/data/collections_non_generic/comparators.shtml
3 голосов
/ 15 февраля 2012

Предполагая, что вы не хотите сортировать целое число (сохраненное в виде строки) в алфавитном порядке, вы не можете использовать компаратор по умолчанию, но сначала нужно преобразовать его обратно в целое число:

Collections.sort(detail_view, new Comparator<List<String>>(){
    int compareTo(List<String> a, List<String> b){
         return Integer.valueOf(a.get(0)).compareTo(Integer.valueOf(b.get(0));
    }
});

Могу ли япредложить не использовать список для трех частей данных, а свой собственный класс бинов?

2 голосов
/ 15 февраля 2012

Создайте класс с тремя полями;не перемещайте их как List<String>, это просто глупо.Сделав этот класс сопоставимым, вы сможете сортировать их по своему усмотрению.

1 голос
/ 21 мая 2015

Java 8 версия:

Collections.sort(fieldValues, Comparator.comparing(e -> e.get(0)));

Эта версия будет сортировать целые числа как числа, а не строки:

Collections.sort(fieldValues, Comparator.comparing(e -> Integer.valueOf(e.get(0))));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...