tl; dr
Это однострочник, использующий современные java.time классы и лямбда-синтаксис.
Разобрать каждую строку в LocalDate
, собирать, сортировать и регенерировать строки как выходные данные.
Arrays.stream(
new String[] { "20 Oct 2052" , "26 May 1960" , "06 Jun 1933" , "06 Jun 1933" , "06 Jun 1933" }
)
.map( input -> LocalDate.parse( input , DateTimeFormatter.ofPattern( "dd MMM uuuu" , Locale.US ) ) )
.sorted()
.map( date -> date.format( DateTimeFormatter.ofPattern( "dd MMM uuuu" , Locale.US ) ) )
.collect( Collectors.toList() )
.toString()
[06 июня 1933 г., 06 июня 1933 г., 06 июня 1933 г.,26 мая 1960 г., 20 октября 2052 г.]
Шаги:
- Создать поток элементов вашего массива (строковые входы).
- Обработать каждый входСинтаксический анализ для получения
LocalDate
- Сортировка
LocalDate
объектов - На каждом
LocalDate
, сгенерируйте текст, представляющий его значение. - Соберите каждую из этих сгенерированных строкв
List
. - Генерация текста, представляющего список строк, теперь отсортированных в хронологическом порядке.
Смарт-объекты, а не немые строки
Использовать соответствующие данныетипы, а не просто строки.
Для значения только на дату без времени суток и без часового пояса используйте LocalDate
class.
Определите шаблон форматирования, соответствующий вашим вводам.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd MMM uuuu" , Locale.US );
Зацикливание входов, анализируя каждый в LocalDate
.Соберите каждый полученный LocalDate
в List
.
List < LocalDate > dates = new ArrayList <>( inputs.length );
for ( String input : inputs ) {
LocalDate ld = LocalDate.parse( input , f );
dates.add( ld );
}
Или вместо этого используйте короткий и сладкий лямбда-синтаксис.
List < LocalDate > dates = Arrays.stream( inputs ).map( input -> LocalDate.parse( input , f ) ).collect( Collectors.toList() );
Сортируйте список LocalDate
объектов.
Collections.sort( dates );
Сообщите о своем отсортированномдаты в стандартном формате ISO 8601.
String outputs = dates.toString() ;
[1933-06-06, 1933-06-06, 1933-06-06, 1960-05-26, 2052-10-20]
Сообщите отсортированные даты в любом желаемом формате.
List < String > outputs = new ArrayList <>( dates.size() );
for ( LocalDate date : dates ) {
outputs.add( date.format( f ) );
}
[06 июня 1933 г., 06 июня 1933 г., 06 июня 1933 г., 26 мая 1960 г., 20 октября 2052 г.]
О java.time
В Java встроен фреймворк java.time 8 и позже.Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .
Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
ThreeTen-Extra Проект расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .