Sobes.tech
Middle

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 typu T.
  • DoubleConsumer: Prijíma argument typu double. Ide o špecializáciu primitívneho Consumer, ktorá zabraňuje automatickému zabaličkovaniu a funguje efektívnejšie.
  • IntConsumer: Prijíma argument typu int. Tiež je primitívnou špecializáciou pre efektívnosť.
  • LongConsumer: Prijíma argument typu long. Ď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.