Функсионалӣ интерфейсҳои Consumer<T>, DoubleConsumer, IntConsumer ва LongConsumer барои чӣ лозиманд?
sobes.tech AI
Ҷавоб аз AI
Интерфейсҳои функсионалӣ Consumer<T>, DoubleConsumer, IntConsumer ва LongConsumer барои намояндагии амалҳое истифода мешаванд, ки як аргументи воридотиро қабул мекунанд ва натиҷа намегардонанд. Онҳо қисми баста java.util.function мебошанд.
Consumer<T>: Аргументи ҳар гуна навъиT-ро қабул мекунад.DoubleConsumer: Аргументи навъиdouble-ро қабул мекунад. Ин махсусгардонии primitives-роConsumerмебошад, ки аз автоматикӣ кардани боксинг пешгирӣ мекунад ва самараноктар кор мекунад.IntConsumer: Аргументи навъиint-ро қабул мекунад. Ҳамчунин, махсусгардонии primitives барои самаранокӣ.LongConsumer: Аргументи навъиlong-ро қабул мекунад. Як дигар махсусгардонии primitives.
Қолаби асосии истифодаи ин интерфейсҳо дар Lambdas ва истинодҳо ба методҳо мебошад. Онҳо дар API-и stream-ҳои Java барои иҷрои таъсирҳои тарафӣ ба унсурҳои stream, масалан, барои чоп дар консол ё тағир додани ҳолати беруна, бисёр истифода мешаванд.
Маслиҳат барои истифодаи Consumer<T>:
// Эҷоди Consumer, ки сатрро мебарорад
Consumer<String> printConsumer = s -> System.out.println(s);
// Истифодаи Consumer
printConsumer.accept("Салом, ҷаҳон!");
// Истифода дар stream
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().forEach(n -> System.out.println(n)); // Истифодаи lambda бо Consumer
Маслиҳат барои истифодаи IntConsumer:
// Эҷоди IntConsumer, ки рақамро мебарорад
IntConsumer printIntConsumer = i -> System.out.println(i);
// Истифодаи IntConsumer
printIntConsumer.accept(10);
// Истифода дар stream-и primitive-ҳои int
IntStream.range(1, 5).forEach(printIntConsumer); // Самараноктар барои навъҳои primitive
Маслиҳатҳои primitives (DoubleConsumer, IntConsumer, LongConsumer) бояд дар муқоиса бо ҳамон Consumer<T>-и умумӣ барои беҳтар кардани иҷроиш, бо мақсади пешгирӣ кардани амалиётҳои boxing/unboxing, истифода шаванд.