Задача на Stream API Java
Необходимо создать класс клиента со следующими полями: уникальный идентификатор, имя, возраст. Также у клиента есть список телефонов. Класс телефона содержит само значение и тип (стационарный или мобильный).
Найти самого возрастного клиента, которой пользуется стационарным телефоном
static class Client {
Integer id;
String name;
Integer age;
List<Phone> phones;
...
}
static class Phone {
Long number;
PhoneType type;
...
enum PhoneType {
STATIONARY,
MOBIL
}
}
clients.stream()...
Как отфильтровать клиентов по полю вложенного списка (тип телефона) и сохранить клиента в потоке для дальнейшего поиска максимального возраста?
Ответы (1 шт):
Автор решения: NyashMyash99
→ Ссылка
Можно использовать тот же самый SteamAPI.
// Искомый тип телефона.
Phone.PhoneType searchableType = Phone.PhoneType.STATIONARY;
Client oldestClient = clients.stream()
// Оставляет пользователей, у которых в результате метода "filter" вернулось "true".
.filter((client) ->
// Проверяет, имеется ли в списке телефонов телефон с искомым типом.
client.phones.stream()
.anyMatch((phone) -> phone.type == searchableType)
)
// Находит клиента с самым большим возрастом.
.max(Comparator.comparingInt(client -> client.age))
// Так как функция "max" возвращает "Optional", добавляем "orElse", который вернёт default значение ( в нашем случае null ), если после "filter" клиентов не осталось ( ничего не найдено ).
.orElse(null);