Sobes.tech
Middle

Функсионалӣ интерфейсҳои 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, истифода шаванд.