Ποιος είναι ο σκοπός των λειτουργικών διεπαφών Consumer<T>, DoubleConsumer, IntConsumer και LongConsumer;
sobes.tech AI
Απάντηση από AI
Οι λειτουργικές διεπαφές Consumer<T>, DoubleConsumer, IntConsumer και LongConsumer χρησιμοποιούνται για την αναπαράσταση λειτουργιών που δέχονται ένα εισερχόμενο όρισμα και δεν επιστρέφουν αποτέλεσμα. Αποτελούν μέρος του πακέτου java.util.function.
Consumer<T>: Δέχεται ένα όρισμα οποιουδήποτε τύπουT.DoubleConsumer: Δέχεται ένα όρισμα τύπουdouble. Είναι μια ειδική περίπτωση πρωτογενούς τύπου τουConsumer, που αποφεύγει το autoboxing και λειτουργεί πιο αποδοτικά.IntConsumer: Δέχεται ένα όρισμα τύπουint. Επίσης, μια ειδική περίπτωση πρωτογενούς τύπου για αποδοτικότητα.LongConsumer: Δέχεται ένα όρισμα τύπουlong. Μια άλλη ειδική περίπτωση πρωτογενούς τύπου.
Η κύρια χρήση αυτών των διεπαφών είναι σε Lambdas και αναφορές σε μεθόδους. Χρησιμοποιούνται συχνά στο API των ροών της Java για την εκτέλεση παρενεργειών στα στοιχεία της ροής, π.χ., για εκτύπωση στην κονσόλα ή τροποποίηση εξωτερικής κατάστασης.
Παράδειγμα χρήσης του Consumer<T>:
// Δημιουργία ενός Consumer που εκτυπώνει μια συμβολοσειρά
Consumer<String> printConsumer = s -> System.out.println(s);
// Χρήση του Consumer
printConsumer.accept("Γειά σου, κόσμε!");
// Χρήση σε ροή
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().forEach(n -> System.out.println(n)); // Χρήση lambda
Παράδειγμα χρήσης του IntConsumer:
// Δημιουργία ενός IntConsumer που εκτυπώνει έναν αριθμό
IntConsumer printIntConsumer = i -> System.out.println(i);
// Χρήση του IntConsumer
printIntConsumer.accept(10);
// Χρήση σε ροή primitive ακέραιων
IntStream.range(1, 5).forEach(printIntConsumer); // Πιο αποδοτικό για primitive τύπους
Οι ειδικεύσεις primitive (DoubleConsumer, IntConsumer, LongConsumer) θα πρέπει να προτιμώνται έναντι των γενικών Consumer<T> όταν εργάζεστε με primitive τύπους, για βελτίωση της απόδοσης αποφεύγοντας τις λειτουργίες boxing/unboxing.