Na čo sú funkčné rozhrania Consumer<T>, DoubleConsumer, IntConsumer a LongConsumer?
sobes.tech AI
Odpoveď od AI
Funkčné rozhrania Consumer<T>, DoubleConsumer, IntConsumer a LongConsumer sa používajú na reprezentáciu operácií, ktoré prijímajú jeden vstupný argument a nevracajú výsledok. Sú súčasťou balíka java.util.function.
Consumer<T>: Prijíma argument akéhokoľvek typuT.DoubleConsumer: Prijíma argument typudouble. Ide o špecializáciu primitívnehoConsumer, ktorá zabraňuje automatickému zabaličkovaniu a funguje efektívnejšie.IntConsumer: Prijíma argument typuint. Tiež je primitívnou špecializáciou pre efektívnosť.LongConsumer: Prijíma argument typulong. Ďalšia primitívna špecializácia.
Hlavné použitie týchto rozhraní je v Lambdas a odkazoch na metódy. Často sa používajú v API streamov Java na vykonávanie vedľajších efektov na prvkoch streamu, napríklad na výpis na konzolu alebo na zmenu vonkajšieho stavu.
Príklad použitia Consumer<T>:
// Vytvorenie Consumer, ktorý vypisuje reťazec
Consumer<String> printConsumer = s -> System.out.println(s);
// Použitie Consumer
printConsumer.accept("Ahoj, svet!");
// Použitie v streamu
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().forEach(n -> System.out.println(n)); // Použitie lambda s Consumer
Príklad použitia IntConsumer:
// Vytvorenie IntConsumer, ktorý vypisuje číslo
IntConsumer printIntConsumer = i -> System.out.println(i);
// Použitie IntConsumer
printIntConsumer.accept(10);
// Použitie v streamu primitivných intov
IntStream.range(1, 5).forEach(printIntConsumer); // Efektívnejšie pre primitívne typy
Primitívne špecializácie (DoubleConsumer, IntConsumer, LongConsumer) by mali byť uprednostňované pred ich všeobecnými ekvivalentmi Consumer<T> pri práci s primitívnymi typmi na zlepšenie výkonu, vyhýbaním sa operáciám boxovania/unboxovania.