Сначала исключите null-пользователей и неподходящее имя, затем проверьте наличие продуктов. Для нечувствительного к регистру префикса A не нужно преобразовывать всю строку.
Отбор пользователей с товарами и именем, начинающимся на «A»
Сначала исключите null-пользователей и неподходящее имя, затем проверьте наличие продуктов. Для нечувствительного к регистру префикса A не нужно преобразовывать всю строку.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Задача состоит в том, чтобы отобрать из списка только тех пользователей, у которых имеется хотя бы один продукт и фамилия (или имя) начинается с буквы "A" без учёта регистра. У каждого пользователя есть поле products — массив/список товаров, которое может быть пустым либо иметь значение null. Требуется написать решение, используя Stream API, корректно обрабатывающее любые null‑значения и оптимизирующее порядок проверок. На выходе необходимо получить список пользователей, прошедших оба условия.
Ответ
Сначала исключите null-пользователей и неподходящее имя, затем проверьте наличие продуктов. Для нечувствительного к регистру префикса A не нужно преобразовывать всю строку.
Если products — Collection, а имя доступно через getName():
public List<User> select(List<User> users) {
if (users == null) return List.of();
return users.stream()
.filter(java.util.Objects::nonNull)
.filter(u -> u.getName() != null
&& u.getName().regionMatches(true, 0, "A", 0, 1))
.filter(u -> u.getProducts() != null && !u.getProducts().isEmpty())
.collect(java.util.stream.Collectors.toList());
}
Имена getters условные. Для массива используйте length > 0. Если важны реальные товары, а коллекция может состоять только из null, вместо isEmpty проверяйте наличие ненулевого элемента.