Сортировка строки [] с датами - PullRequest
1 голос
/ 13 июня 2019

Я отчаянно пытаюсь отсортировать массив с датой, например. "31.05.2019". В настоящее время я пытаюсь сделать это путем преобразования в тип даты, а затем обратно. Это тоже работает. Я просто не могу преобразовать строку [] в Date []. Может кто-нибудь сказать мне, как это сделать? или, если необходимо, дайте мне более простой способ сортировки? К сожалению, я не нашел ничего подходящего в Интернете. Также может быть, что я слишком глуп.

Я попытался вручную преобразовать строку в дату, и она работает. Но я пробовал разные способы конвертировать String [] в Date []. Я пытался с петлей .. и некоторые другие вещи ... но это не работает ..

public static void main(String[] args) throws ParseException {
    TagebuchIO io = new TagebuchIO();
    String[] stringio = io.getTagebuchliste();
    //He got the Dates with stringio
    SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyy");

    Date date = sdf.parse("10.05.2010");
    Date date2 = sdf.parse("09.02.2012");
    Date[] d = {date, date2};
    Arrays.sort(d);
    String ergbenis1 = sdf.format(d[0]);
    System.out.println(ergbenis1);
    ergbenis1 = sdf.format(d[1]);
    System.out.println(ergbenis1);
}

Ответы [ 3 ]

4 голосов
/ 13 июня 2019

Рассмотрите возможность использования LocalDate вместо Date:

import java.time.format.DateTimeFormatter;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.stream.Stream;

class Main {
  public static void main(String[] args) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");

    String[] strDates = new String[] {"12.06.2019", "31.05.2019", "10.05.2010", "09.02.2012"};
    LocalDate[] dates = Stream.of(strDates).map(date -> LocalDate.parse(date, formatter))
                                           .toArray(LocalDate[]::new);

    System.out.println(String.format("Unsorted dates: %s", Arrays.toString(dates)));
    Arrays.sort(dates);
    System.out.println(String.format("Sorted dates: %s", Arrays.toString(dates)));

    System.out.println("Formatted Dates:");
    for (LocalDate d : dates) {
      System.out.println(formatter.format(d));
    }
  }
}

Вывод:

Unsorted dates: [2019-06-12, 2019-05-31, 2010-05-10, 2012-02-09]
Sorted dates: [2010-05-10, 2012-02-09, 2019-05-31, 2019-06-12]
Formatted Dates:
10.05.2010
09.02.2012
31.05.2019
12.06.2019
1 голос
/ 13 июня 2019

Вы можете конвертировать String [] в Dates [], используя следующее:

Date[] d = new Date[args.length];
for (int i = 0; i < args.length; i++) {
    d[i] = sdf.parse(dates[i]);
}

Вы можете отсортировать массив Date [] d следующим образом:

Arrays.sort(d);

А затем измените массив String [] следующим образом:

for (int i = 0; i < args.length; i++) {
    args[i] = sdf.format(d[i]);
}

Я думаю, что это приемлемое решение. Вы ищете что-то еще?

0 голосов
/ 13 июня 2019

Следующий псевдокод может помочь

ArrayList<String> dateStrings = new ArrayList<>(  );
    [...]
List<LocalDate> dates = dateStrings.stream()
            .map( LocalDate::parse )
            .collect( Collectors.toList() );
dates.sort();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...