Le Stream de Java8 est vraiment parfumé, vous ne saurez jamais si vous ne l'avez pas expérimenté

Original: Braces MC (compte public WeChat: huakuohao-mc). Concentrez-vous sur la programmation de base JAVA et le Big Data, concentrez-vous sur le partage d'expérience et la croissance personnelle.

Bien que Oaclela dernière JDKversion officiellement publiée soit arrivée JDK14. Mais je crois que de nombreuses équipes sont toujours sur le système de production JDK8, et même certaines équipes sont encore JDK7ou JDK6. Même JDK8si de nombreuses équipes ont mis à niveau l'environnement de production vers , le code est toujours de l'ancien code, ce qui signifie que JDK8les nouvelles fonctionnalités fournies ne sont pas du tout utilisées .

JDK8Cela apporte beaucoup de commodité aux programmeurs et permet même aux Javaprogrammeurs de suivre Python. Lorsque les Rubyprogrammeurs se déchirent, ils peuvent hausser les sourcils et expirer, car JDK8finalement ils prennent en charge la "paramétrisation du comportement", ce que tout le monde dit souvent, vous pouvez mettre Une fonction est passée en paramètre à une autre fonction .

JDK8Les deux changements les plus évidents sont le début de la prise en charge des Lambdaexpressions et la Streamdiffusion en continu des collections . Ces deux fonctionnalités peuvent rendre le code que nous écrivons plus élégant et nous faciliter la mise en œuvre de certaines fonctions. En particulier Stream, il est super facile à utiliser, rentable et prend 20 minutes à apprendre. Vous pouvez améliorer la qualité de votre code d'un niveau.

Permettez-moi d'énumérer quelques scènes simples, laissez-vous sentir à quel point l'API Java8fournie Streamest pratique et élégante, elle peut être considérée comme une astuce.

Le plus couramment utilisé dans le codage quotidien est la collection. Par exemple, nous pouvons interroger le nombre de livres vendus en une journée à partir de la base de données. Généralement, nous l'écrirons, List<Book> books = query.find(date);puis nous effectuerons diverses opérations sur cette collection pour répondre aux besoins du niveau de produit.

Scénario 1: Imprimez les détails de chaque livre.

Avant JDK8

//打印出每本书的详情
for (Book book : books){
    System.out.println(book.toString());
}
复制代码

Après avoir utilisé Stream

//打印每本书详情
books.stream().forEach(book -> book.toString());
复制代码
Scénario 2: Sélectionnez le prix supérieur à 20 yuans

Avant JDK8

List<Book> highPriceBooks = new ArrayList<>();
for (Book book : books){
    if (book.getPrice()>20){
        highPriceBooks.add(book);
    }
}
复制代码

Après avoir utilisé Stream

highPriceBooks = books.stream().filter(book -> book.getPrice()>20).collect(Collectors.toList());
复制代码
Scène 3: Trier par prix du livre

Avant JDK8

List<Book> sortBooks = new ArrayList<>();
for (Book book : books){
    Collections.sort(books, new Comparator<Book>() {
        @Override
        public int compare(Book o1, Book o2) {
            if (o1.getPrice() > o2.getPrice()){
                return 1;
            }else if (o1.getPrice() < o2.getPrice()){
                return -1;
            }else {
                return 0;
            }
        }    
     });
}
复制代码

Après avoir utilisé Stream

sortBooks = books.stream().sorted(Comparator.comparing(Book::getPrice)).collect(Collectors.toList());
复制代码

Si vous le souhaitez, vous pouvez directement l' reversed()inverser, comme ceci

sortBooks = books.stream().sorted(Comparator.comparing(Book::getPrice).reversed()).collect(Collectors.toList());
复制代码
Scène 4: Obtenez tous les titres

Avant JDK8

List<String> bookNames = new ArrayList<>();
for (Book book : books){
    bookNames.add(book.getName());
}
复制代码

Après avoir utilisé Stream

bookNames = books.stream().map(Book::getName).collect(Collectors.toList());
复制代码
Scène 5: Obtenez la somme de tous les prix des livres

Avant JDK8

//计算一天当中卖出的所有书的价格总和。
int totalNum = 0;
for (Book book : books){
    totalNum += book.getPrice();
}
复制代码

Après avoir utilisé Stream

totalNum = books.stream().map(Book::getPrice).reduce(0,(a,b)->a+b);
复制代码
Et bien d'autres

Pensez-vous que c'est JDK8la Streamcompétence? Il peut également terminer le traitement en chaîne, comme celui-ci

//选出价格高于20的两个元素。
books.stream().filter(book -> book.getPrice()> 20).limit(2).collect(Collectors.toList());
复制代码

De plus, si vous souhaitez utiliser votre CPU multicœur pour traiter des collections en parallèle afin d'améliorer la vitesse de calcul, il JDK8vous suffit d'appeler la parallelStreamméthode simplement . Tout comme cela, books.parallelStream().forEach(book -> book.toString());JDK vous aidera automatiquement à traiter en parallèle, pas mal.

D'accord, tant d'écriture, plus de compétences d'utilisation doivent encore creuser votre propre expérience, je vais passer au code, bye! Rappelez-vous une phrase, Java8les nouvelles choses fournies, cela vaut la peine de faire vos efforts pour étudier.


Lecture recommandée:

Les programmeurs Java doivent lire la liste des livres principaux - la version de base

Collection d'instructions de fonctionnement et de maintenance Javaer (version Fast Food)

Apprenez à créer un ensemble de plate-forme de maintenance et d'opération de recherche de journaux ELK

Je suppose que tu aimes

Origine juejin.im/post/5e9672af6fb9a03c5f73fd28
conseillé
Classement