Как не учитывать элементы листа, которые не соответствуют требованиям?

274
08 июня 2017, 06:03

Работаю с Date.
Есть определенный List data.
В нем хранятся день рождения людей. Проблема в том, что есть дата полная (Например, "19.02.1996"), а есть без года ("25.03"), а есть вообще без возраста(null).
Я делаю метод чтобы высчитать возраст этих людей, но не могу придумать как откинуть тех людей, у которых не указан возраст.
Вот кусок кода, который сейчас у меня имеется:

for (int i = 0; i < data.size(); i++) {
    String num = data.get(i).getBdate();
    if (num != null) {
       System.out.println(num);
       String dataFormat = "dd.MM.yyyy";
       SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dataFormat);
       ...
 }

Хочу сделать такое условие if(num соответствует dataFormat){ //Считать возраст}

Answer 1

Можно воспользоваться методом isValidFormat из этого ответа, добавив в него обработку случая, когда вместо даты null.

Вот пример:

public static void main(String[] args) {
    String dateFormat = "dd.MM.yyyy";
    String[] arr = {
        "19.02.1996",
        "25.03",
        null
    };
    for (String date: arr) {
        if (isValidFormat(dateFormat, date)) {  // Проверка даты на валидность
            System.out.println(date);
            // Делаем, что надо
        }
    }
}
public static boolean isValidFormat(String format, String value) {
    if (value == null)
        return false;
    Date date = null;
    try {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        date = sdf.parse(value);
        if (!value.equals(sdf.format(date))) {
            date = null;
        }
    } catch (ParseException ex) {}
    return date != null;
}

Такой способ позволит вам легко изменять формат даты, на соответствие которому нужно её проверять.

Answer 2
list.stream()
    .filter(data->!data.getBDay().isEmpty())
    .filter(data->data.getBDay().length > 5)
    .forEach(data->{
            //Ваш код
    });
READ ALSO
Коллизии в map java

Коллизии в map java

Подскажите пожалуйста, как реализуются коллизии в map java и чем отличаются реализации этих коллизий (массивы и LinkedList)?

393
Умный builder в Java

Умный builder в Java

Для своей библиотеки решил использовать паттерн билдераКаким образом можно полностью защитить структуру от вылетов приложения, связанных...

217
Как сделать границы Floating searchview прозрачными?

Как сделать границы Floating searchview прозрачными?

Здравствуйте, в fsv не могу понять, как сделать границы виджета прозрачными или же поменять их цветВ xml не нашёл нужного аттрибута, может быть...

322
Ошибка инициализации Hibernate(фреймворк Vaadin)

Ошибка инициализации Hibernate(фреймворк Vaadin)

Всем привет пишу мультипользовательский портал, столкнулся с такой проблемойВремя от времени получаю такую ошибку "ExceptionInitializer error at db

288