Назад к вопросам
Middle
68
questionbank

Для чего используются функциональные интерфейсы ObjDoubleConsumer<T>, ObjIntConsumer<T> и ObjLongConsumer<T>?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Функциональные интерфейсы ObjDoubleConsumer<T>, ObjIntConsumer<T> и ObjLongConsumer<T> используются для представления операций, которые принимают в качестве аргументов объект заданного типа T и примитивное значение (double, int или long соответственно), и не возвращают никакого результата (void).

Они являются специализированными версиями интерфейса BiConsumer<T, U>, оптимизированными для работы с примитивными типами, что позволяет избежать автоупаковки/распаковки и связанных с этим накладных расходов.

Примеры использования:

  • ObjDoubleConsumer<String>: Операция, принимающая строку и значение double. Например, для записи ассоциации строкового ключа с double-значением.
  • ObjIntConsumer<List<Integer>>: Операция, принимающая список целых чисел и значение int. Например, для добавления int значения в список.
  • ObjLongConsumer<Map<UUID, String>>: Операция, принимающая карту и значение long. Например, для обновления записи в карте на основе long значения.

Они часто используются в стримах (Stream API) для выполнения побочных эффектов (например, вывод в консоль, изменение состояния объекта/коллекции) при обработке элементов, когда один из аргументов является объектом, а другой — примитивом соответствующего типа.

Пример с ObjIntConsumer:

import java.util.ArrayList;
import java.util.List;
import java.util.function.ObjIntConsumer;

// Создаем список
List<Integer> numbers = new ArrayList<>();

// Определяем ObjIntConsumer для добавления int к списку
ObjIntConsumer<List<Integer>> addToList = (list, value) -> list.add(value);

// Используем потребитель
addToList.accept(numbers, 10);
addToList.accept(numbers, 20);

// Выводим результат
System.out.println(numbers); // Вывод: [10, 20]