Middle
Milleks on vajalikud funktsionaalsed liidesed Consumer<T>, DoubleConsumer, IntConsumer ja LongConsumer?
sobes.tech AI
Vastus AI-lt
Funktsionaalsed liidesed Consumer<T>, DoubleConsumer, IntConsumer ja LongConsumer kasutatakse operatsioonide esitamiseks, mis võtavad ühe sisendargumendi ja ei tagasta tulemust. Need kuuluvad java.util.function paketti.
Consumer<T>: võtab argumendina mistahes tüüpiT.DoubleConsumer: võtab argumenti tüüpidouble. See onConsumerprimitiivne spetsialiseerumine, mis võimaldab vältida automaatset pakendamist ja töötab tõhusamalt.IntConsumer: võtab argumenti tüüpiint. Samuti primitiivne spetsialiseerumine tõhususe huvides.LongConsumer: võtab argumenti tüüpilong. Veel üks primitiivne spetsialiseerumine.
Nende liideste peamine kasutusala on lambda väljendites ja meetodite viidetes. Neid kasutatakse sageli Java voogude API-s kõrvaltoimete teostamiseks voogude elementidel, näiteks konsoolile väljastamiseks või välise oleku muutmiseks.
Consumer<T> näide:
// Loo Consumer, mis väljastab stringi
Consumer<String> printConsumer = s -> System.out.println(s);
// Kasuta Consumerit
printConsumer.accept("Tere, maailm!");
// Kasutus voos
List<Integer> arvud = Arrays.asList(1, 2, 3, 4, 5);
arvud.stream().forEach(n -> System.out.println(n)); // Lambda kasutamine
IntConsumer näide:
// Loo IntConsumer, mis väljastab numbri
IntConsumer printIntConsumer = i -> System.out.println(i);
// Kasuta IntConsumerit
printIntConsumer.accept(10);
// Efektiivsem primitiivsete int voogude kasutamine
IntStream.range(1, 5).forEach(printIntConsumer); // Efektiivsem primitiivsetele tüüpidele
Primitivspetsialiseerumised (DoubleConsumer, IntConsumer, LongConsumer) tuleks eelistada nende üldiste analoogide ees, et parandada jõudlust, vältides boksimise ja unboksimise operatsioone.