Формирование списка B из списка A с отбором и преобразованием полей

Сначала вычислите y, затем отфильтруйте чётные значения и создайте B. В Java целочисленное деление усекает к нулю; промежуточное умножение лучше выполнить в long.

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

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

Сначала вычислите y, затем отфильтруйте чётные значения и создайте B. В Java целочисленное деление усекает к нулю; промежуточное умножение лучше выполнить в long.

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

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

Условие

Имеются два класса A и B. Требуется получить список объектов B, построив его на основе существующего listA. При этом в результирующий список попадают только те элементы, у которых значение y чётное, а значение y рассчитывается по формуле y = 3 * a.x / 2.

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

List<A> listA = List.of(....);
Lift<B> listB = listA

Необходимо выполнить фильтрацию и преобразование, используя возможности языка Java (например, Stream API) или любой другой подход, который позволяет получить требуемый список listB.

Ответ

Сначала вычислите y, затем отфильтруйте чётные значения и создайте B. В Java целочисленное деление усекает к нулю; промежуточное умножение лучше выполнить в long.

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());

Math.toIntExact явно отклоняет результат вне диапазона int вместо тихого переполнения. Здесь реализована математическая формула с целочисленным делением, а не переполнение выражения 3 * x в int. В исходнике также нужны точка с запятой в конструкторе B и List вместо Lift.

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

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

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

Подробнее