Efficace Java 3e édition Chapitre 7 Lambda et Stream

[Effective Java 3rd Edition](https://www.amazon.co.jp/Effective-Java-%E7%AC%AC3%E7%89%88-%E3%], qui est un livre indispensable pour les utilisateurs Java intermédiaires et supérieurs. 82% B8% E3% 83% A7% E3% 82% B7% E3% 83% A5% E3% 82% A2% E3% 83% BB% E3% 83% 96% E3% 83% AD% E3% 83% 83% E3% 82% AF-ebook / dp / B07RHX1K53) a une version Kindle, donc je vais le résumer.

Précédent: Enum et annotations du chapitre 6 de Java 3rd Edition effective Suivant: Méthodes efficaces du chapitre 8 de Java 3rd Edition

Point 42 Choisissez Lambda plutôt que la classe anonyme

//Classe anonyme
Collections.sort(words, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return Integer.compare(o1.length(), o2.length());
    }
});
//Utiliser lambda
Collections.sort(words, (o1, o2) -> Integer.compare(o1.length(), o2.length()));
//Comparer la méthode de construction
Collections.sort(words, comparingInt(String::length));
//Encore plus court en Java 8
words.sort(comparingInt(String::length));
public enum Operation {
    PLUS("+", (x, y) -> x + y),
    MINUS("-", (x, y) -> x + y),
    TIMES("*", (x, y) -> x + y),
    DIVIDE("/", (x, y) -> x + y);

    private final String symbol;
    private final DoubleBinaryOperator op;

    Operation(String symbol, DoubleBinaryOperator op) {
        this.symbol = symbol;
        this.op = op;
    }
    @Override public String toString() {
        return  symbol;
    }
    public double apply(double x, double y) {
        return op.applyAsDouble(x, y)
    }
}

Point 43 Sélectionnez une référence de méthode plutôt qu'un lambda

--Type de référence de méthode --statique ・ ・ ・ ʻInteger :: parseInt --Bound ・ ・ ・ ʻInstant.now () :: isAfter

Point 44: utiliser une interface fonctionnelle standard

--java.util.Function a 43 interfaces, dont toutes ne peuvent pas être mémorisées, mais tant que vous vous souvenez des 6 interfaces de base, le reste des interfaces peut être dérivé si nécessaire. L'interface --ʻOperator` représente une fonction dont le type résultant est le même que l'argument.

interface Signature de fonction Exemple
UnaryOperator T apply(T t) String::toLowerCase
BinaryOperator T apply(T t1, T t2) BigInteger::add
Predicate boolean test(T t) Collection::isEmpty
Function<T,R> R apply(T t) Arrays::asList
Supplier T get() Instant::now
Consumer void accept(T t) System.out::println

Point 45 Utilisez le flux avec précaution

Élément 46 Sélectionnez une fonction qui n'a pas d'effets secondaires dans le flux

Élément 47 Sélectionnez Collection over Stream comme valeur de retour

Point 48 Faites attention lors de la parallélisation des flux

--Au moment de la sortie de Java, il avait la synchronisation et attendre / notifier, et un support de thread intégré. --Java5 a introduit la bibliothèque java.util.concurrent avec des collections simultanées et un framework d'exécuteur. --Java7 a introduit un framework fork-join haute performance pour le fractionnement en parallèle.

Parallélisation du pipeline de flux pour compter les nombres premiers


    static long pi(long n) {
        return LongStream.rangeClosed(2, n)
                .parallel()
                .mapToObj(BigInteger::valueOf)
                .filter(i -> i.isProbablePrime(50))
                .count();
    }

Recommended Posts

Efficace Java 3e édition Chapitre 7 Lambda et Stream
Efficacité de Java 3rd Edition Chapitre 4 Classes et interfaces
Efficacité de Java 3rd Edition Chapitre 5 Génériques
Méthodes efficaces du chapitre 8 de Java 3rd Edition
Effective Java 3rd Edition Chapitre 2 Création et disparition d'objets
Effective Java 3rd Edition Chapitre 9 Programme Général
Efficace Java 3rd Edition Chapitre 3 Méthodes communes à tous les objets
Ce qui a changé entre la 2e édition effective de Java et la 3e édition
Efficace Java Chapitre 2
Effective Java Chapitre 6 34-35
Effective Java Chapitre 4 15-22
Java efficace Chapitre 3
3ème résumé efficace de Java
[Java] Trier la liste à l'aide de flux et d'expressions lambda
Efficacité de Java 3rd Edition Section 85 Choix d'une alternative à la sérialisation Java
De nos jours, les expressions Java Lambda et l'API de flux
[Lire Java efficace] Chapitre 2 Item 7 "Eviter les finaliseurs"
Traitement parallèle et parallèle dans divers langages (édition Java)
Résumé de l'enquête sur les questions relatives à Java 2e édition efficace
[Lire Java efficace] Chapitre 3 Item 10 "Always Override toString"
Java 8 pour démarrer maintenant ~ for Each et expression lambda ~
J'ai essayé d'expliquer Effective Java 3rd Edition "presque tous les chapitres" en "japonais facile à lire".
Flux et flux parallèle
Java et JavaScript
XXE et Java
Bonjour Java Lambda
[Java] Expression Lambda
Expression lambda Java
J'ai essayé le type d'entrée / sortie de Java Lambda ~ édition POJO ~
[Lire Java efficace] Chapitre 3 Point 12 "Considérer l'implémentation de Comparable"
[Lire Java efficace] Chapitre 2 Item 6 "Supprimer les références d'objets obsolètes"
Mises à jour des notes personnelles en vigueur de Java Third Edition 2nd Edition
J'écrirai un extrait de ce que j'ai trouvé intéressant en lisant Effective Java 3rd Edition