Squeak.ru - шаблоны программирования

Лучший эффективный способ сортировки месяцев и года в Java

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

Фрагмент кода

List<String> abc = new ArrayList<String>();
        List<Date> xyz = new ArrayList<Date>();

        abc.add("JAN-2010");
        abc.add("JAN-2011");
        abc.add("APR-2013");
        abc.add("NOV-2009");

        try {

            for (String abc1 : abc) {

                Date date;

                date = new SimpleDateFormat("MMM-yyyy", Locale.ENGLISH)
                        .parse(abc1);
                xyz.add(date);

            }

            Collections.sort(xyz, new Comparator<Date>() {

                public int compare(Date arg0, Date arg1) {
                    // return arg0.getDate().compareTo(o2.getDate());
                    return arg0.compareTo(arg1);
                }
            });

            for (Date date1 : xyz) {
                System.out.println("Sorted : " + date1);
            }

        } catch (ParseException e) {

            e.printStackTrace();

        }
    }

Вывод

    Sorted : Sun Nov 01 00:00:00 IST 2009
Sorted : Fri Jan 01 00:00:00 IST 2010
Sorted : Sat Jan 01 00:00:00 IST 2011
Sorted : Mon Apr 01 00:00:00 IST 2013

Ожидаемый результат

NOV-2009
JAN-2010
JAN-2011
APR-2013

Я также не уверен, что приведенный выше код идеален с точки зрения производительности, поскольку преобразование строки и синтаксический анализ заняли бы много времени, если бы в списке были тысячи дат в формате MON-YYYY.

24.06.2013

  • Вы сравниваете arg0 с arg0, что явно неверно. 24.06.2013
  • См. stackoverflow.com/questions/9108719/ о том, как сортировать набор дат. 24.06.2013
  • Не нужен компаратор. Даты сопоставимы 24.06.2013
  • Дариджан, я обновил... это была опечатка 24.06.2013
  • @SJagdeesh, пожалуйста, смотрите мой обновленный ответ ниже. 24.06.2013

Ответы:


1

Хорошо, я вижу, вы исправили опечатку.

Теперь помните, что вам нужно использовать DateFormatter также при представлении данных, в дополнение к их анализу.

Поэтому, пожалуйста, попробуйте это:

        for (Date date1 : xyz) {
            System.out.println("Sorted : " + new SimpleDateFormat("MMM-yyyy", Locale.ENGLISH).format(date1));
        }

Возможно, вы захотите сделать SimpleDateFormat доступным для всех методов вашего класса в виде поля.

Дополнительная информация: имейте в виду, что SimpleDateFormat не является потокобезопасным. Вы можете использовать ThreadLocal как одно из решений этой проблемы.

Удачи.

24.06.2013

2

Вы проанализировали свой dateString до фактического объекта Date. И java.util.Date нельзя отформатировать. Можно получить только String представление этого Date объекта.

Вам нужно изменить свой компаратор, чтобы сравнить ваш формат dateString, внутренне преобразовав строки в дату.

Если вы собираетесь сортировать Date объектов, вы получите результат, который у вас есть. Кроме того, как упомянул @darijan, измените свою логику в компараторе.

24.06.2013

3

Во-первых, я думаю, что лучше иметь только один экземпляр SimpleDateFormat и всегда использовать его для анализа ваших дат.
Я также предлагаю создать этот экземпляр SimpleDateFormat перед вашим блоком try, чтобы вы решили свою вторую проблему и могли использовать SimpleDateFormat.format(date) чтобы проанализировать ваши даты обратно в запрошенный строковый формат.

24.06.2013
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...