Sobes.tech
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üüpi T.
  • DoubleConsumer: võtab argumenti tüüpi double. See on Consumer primitiivne spetsialiseerumine, mis võimaldab vältida automaatset pakendamist ja töötab tõhusamalt.
  • IntConsumer: võtab argumenti tüüpi int. Samuti primitiivne spetsialiseerumine tõhususe huvides.
  • LongConsumer: võtab argumenti tüüpi long. 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.