отсортировать уникальный список строк в обратном хронологическом порядке - PullRequest
0 голосов
/ 28 марта 2012

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

Мой Soln: взять строки в списке и заставить компаратор передать список, иобъект этого компаратора реализовал класс для операции сортировки коллекций

public class SortStringsReverse {

    public static void main(String[] args) {
        List l = new ArrayList();
        l.add("ABC");
        l.add("ZXY");

        StringComparator comparatorObj = new StringComparator();
        Collections.sort(l, comparatorObj);
        for(Object s: l){
            System.out.println("values are " + (String)s);
        }
    }
}

class StringComparator implements Comparator{

    public int compare(Object arg0, Object arg1) {
        return ((String)arg1).compareTo((String)arg0);//return ((String)arg0).compareTo((String)arg1);
    }

}

1 Ответ

1 голос
/ 28 марта 2012

Поскольку вы указали, что хотите уникальные элементы в отсортированном порядке, в Java лучшим инструментом для этого является TreeSet (хотя любой SortedSet реализация подойдет). Обычно класс TreeSet хранит элементы в порядке возрастания, но, к счастью, мы можем изменить это с помощью пользовательского объекта Comparator в качестве аргумента.

Я предполагаю, что по вашему вопросу вы хотите, чтобы строки сортировались в обратном алфавитном порядке, поскольку здесь нет смысла в хронологическом порядке, но на самом деле вы можете реализовать свой собственный Comparator по мере необходимости. Теперь предоставленный вами Comparator будет сортировать строки в соответствии с исходным способом Java: строки, расположенные ниже в алфавите, будут сравниваться как поступающие после строк, "ближе" к началу алфавита (например, "bananas".compareTo("zebra") вернет положительный результат , "zebra".compareTo("bananas") отрицательный. Чтобы изменить алфавитный порядок, мы можем использовать эту двойственность и обратный порядок сравнений, сравнить второй аргумент с первым, как таковой:

class StringComparator implements Comparator<String>{

    public int compare(String arg0, String arg1) {
        return arg1.compareTo(arg0);
    }

}

Теперь передайте объект этого класса в ваш TreeSet<String> объект, и вы должны быть установлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...