Для чего используются функциональные интерфейсы 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]