Stream API: отбор и преобразование элементов

Преобразуйте x в y, отфильтруйте нечётные y и создайте B для оставшихся значений. Проверять нужно чётность результата формулы, не исходного x.

Короткий ответ

Что ответить на собеседовании

Преобразуйте x в y, отфильтруйте нечётные y и создайте B для оставшихся значений. Проверять нужно чётность результата формулы, не исходного x.

Подробный разбор

Ответ с пояснениями

Условие

Дана коллекция List<A>. Требуется получить List<B>, оставив только те объекты A, для которых вычисленное значение y = 3 * x / 2 является чётным числом. Преобразование элементов: создаётся новый объект B(y), где y рассчитывается как 3 * a.x / 2. Реализовать задачу с использованием Stream API.

public class A { public int x; }

public class B {
    public int y;
    public B(int y) { this.y = y; }
}

List<A> listA = List.of(...);

Ответ

Преобразуйте x в y, отфильтруйте нечётные y и создайте B для оставшихся значений. Проверять нужно чётность результата формулы, не исходного x.

List<B> listB = listA.stream()
        .mapToLong(a -> 3L * a.x / 2)
        .filter(y -> y % 2 == 0)
        .mapToObj(y -> new B(Math.toIntExact(y)))
        .collect(java.util.stream.Collectors.toList());

Деление целочисленное, с округлением к нулю. Long устраняет переполнение промежуточного умножения, а Math.toIntExact явно проверяет возможность записи в int B.y. Предполагается отсутствие null. Время O(n), память O(k) для результата; порядок входа сохраняется.

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

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

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

Подробнее