Sobes.tech
Middle

Mire jók a Consumer<T>, DoubleConsumer, IntConsumer és LongConsumer funkcionális interfészek?

sobes.tech MI

Válasz az MI-től

A Consumer<T>, DoubleConsumer, IntConsumer és LongConsumer funkcionális interfészek olyan műveletek reprezentálására szolgálnak, amelyek egy bemeneti argumentumot fogadnak, és nem adnak vissza eredményt. Ezek a java.util.function csomag részei.

  • Consumer<T>: Bármilyen típusú T argumentumot fogad.
  • DoubleConsumer: double típusú argumentumot fogad. Ez a Consumer primitív specializációja, amely elkerüli az autoboxolást, és hatékonyabb működést tesz lehetővé.
  • IntConsumer: int típusú argumentumot fogad. Szintén primitív specializáció a hatékonyság érdekében.
  • LongConsumer: long típusú argumentumot fogad. Egy másik primitív specializáció.

Ezeknek az interfészeknek a fő alkalmazási területe Lambdák és metódusreferenciák. Gyakran használják a Java stream API-jában, hogy mellékhatásokat hajtsanak végre a stream elemein, például a konzolra íráshoz vagy külső állapot módosításához.

Példa a Consumer<T> használatára:

// Egy Consumer létrehozása, amely kiír egy sztringet
Consumer<String> printConsumer = s -> System.out.println(s);

// Consumer alkalmazása
printConsumer.accept("Helló, világ!");

// Használat stream-ben
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().forEach(n -> System.out.println(n)); // Lambda-val a Consumer

Példa az IntConsumer használatára:

// Egy IntConsumer létrehozása, amely kiír egy számot
IntConsumer printIntConsumer = i -> System.out.println(i);

// IntConsumer alkalmazása
printIntConsumer.accept(10);

// Használat primitív int stream-ben
IntStream.range(1, 5).forEach(printIntConsumer); // Hatékonyabb primitív típusok esetén

A primitív specializációk (DoubleConsumer, IntConsumer, LongConsumer) előnyösebbek a generikus Consumer<T>-nél, ha primitív típusokkal dolgozunk, mivel elkerülik a boxing/unboxing műveleteket, ezáltal javítva a teljesítményt.