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úTargumentumot fogad.DoubleConsumer:doubletípusú argumentumot fogad. Ez aConsumerprimitív specializációja, amely elkerüli az autoboxolást, és hatékonyabb működést tesz lehetővé.IntConsumer:inttípusú argumentumot fogad. Szintén primitív specializáció a hatékonyság érdekében.LongConsumer:longtí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.