Отбор пользователей с товарами и именем, начинающимся на «A»

Сначала исключите null-пользователей и неподходящее имя, затем проверьте наличие продуктов. Для нечувствительного к регистру префикса 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 проверяйте наличие ненулевого элемента.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее