Дни рождения в объеме java .time.LocalDate - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь выбрать дни рождения (независимо от года) в коллекции java.time.LocalDate. Почему LocalDate? потому что этот тип кажется лучшим для дня рождения.

Допустим, я хочу отфильтровать дни рождения между 6 марта и 30 апреля независимо от года. Как это сделать?

Если бы я это сделал, я бы заменил год в LocalDate и использовал бы методы isAfter и isBefore. Тот факт, что я должен сменить год, - просто хак. Или я использовал неправильный тип данных (LocalDate)

Ответы [ 2 ]

5 голосов
/ 20 февраля 2020

Я бы предпочел использовать тип MonthDay , который является "датой без года", который также сопоставим и предлагает методы типа isAfter() или isBefore(). Кроме того, MonthDay может быть расширен до LocalDate с использованием метода atYear(int).

Если вы настаиваете на LocalDate, вам следует использовать только високосные годы, потому что в противном случае 29 февраля было бы проблема.

1 голос
/ 20 февраля 2020
List<LocalDate> birthdays = Arrays.asList(
        LocalDate.of(1990, Month.JANUARY, 5),
        LocalDate.of(1992, Month.MARCH, 7),
        LocalDate.of(1995, Month.MAY, 5));
MonthDay filterFrom = MonthDay.of(Month.MARCH, 6);
MonthDay filterTo = MonthDay.of(Month.APRIL, 30);

List<LocalDate> filteredDates = birthdays.stream()
        .filter(date -> {
            MonthDay md = MonthDay.from(date);
            return md.compareTo(filterFrom) >= 0 && md.compareTo(filterTo) <= 0;
        })
        .collect(Collectors.toList());

System.out.println(filteredDates);
...