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 տիպի արգումենտ: Սա Consumer-ի պրիմիտիվ մասնագիտացումն է, որը խուսափում է ավտոմատ բոքսավորումից և աշխատում է ավելի արդյունավետ:
  • IntConsumer: ընդունում է int տիպի արգումենտ:
  • LongConsumer: ընդունում է long տիպի արգումենտ:

Այս ինտերֆեյսների հիմնական կիրառությունը Lambda-ներում և մեթոդների հղումներում է: Դրանք հաճախ օգտագործվում են Java stream API-ում՝ սթրիմի տարրերի վրա կողմնակի ազդեցություններ կատարելու համար, օրինակ՝ կոնսոլին տպելու կամ արտաքին վիճակն փոփոխելու համար:

Օրինակ՝ 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);

// Օգտագործում primitive-ների stream-ում
IntStream.range(1, 5).forEach(printIntConsumer); // Ավելի արդյունավետ primitive-ների համար

Պրիմիտիվ մասնագիտացումները (DoubleConsumer, IntConsumer, LongConsumer) պետք է նախընտրել իրենց ընդհանուր Consumer<T>-ի փոխարեն՝ աշխատանքի ժամանակ՝ բարելավելու կատարողականությունը՝ խուսափելով բոքսավորում/անբոքսավորում գործողություններից: