Comment utiliser correctement les flux en Java8 ?

Stream introduit dans Java 8 est un moyen puissant et flexible de traiter les collectes de données. Les flux fournissent un style de programmation déclaratif qui rend la manipulation des données plus concise et lisible. Voici quelques suggestions sur la façon d'utiliser correctement les flux dans Java 8 :

  1. Créer un flux :

    • Utilisez des méthodes Collectiond'interface stream()pour créer des flux.
    List<String> myList = Arrays.asList("apple", "banana", "orange");
    Stream<String> myStream = myList.stream();
    
    • Utilisez Stream.of()la méthode pour créer un flux contenant les éléments spécifiés.
    Stream<String> myStream = Stream.of("apple", "banana", "orange");
    
  2. Opérations intermédiaires :

    • Les opérations intermédiaires sont des méthodes de conversion et de traitement de flux, telles que filter, map, distinctetc.
    myList.stream()
          .filter(s -> s.startsWith("a"))
          .map(String::toUpperCase)
          .distinct()
          .forEach(System.out::println);
    
  3. Fonctionnement des terminaux :

    • Les opérations de terminal sont des méthodes permettant d'effectuer des opérations finales sur des flux, telles que forEach, collect, reduceetc.
    myList.stream()
          .forEach(System.out::println);
    
    List<String> resultList = myList.stream()
                                  .filter(s -> s.length() > 5)
                                  .collect(Collectors.toList());
    
  4. Évitez de modifier les données sources :

    • Les flux sont immuables et chaque opération intermédiaire renvoie un nouveau flux. Évitez de modifier les données sources pour garantir l’immuabilité du flux.
    List<String> modifiedList = myList.stream()
                                     .map(String::toUpperCase)
                                     .collect(Collectors.toList());
    
  5. Utiliser une évaluation paresseuse :

    • Les flux utilisent une évaluation paresseuse et les opérations intermédiaires ne sont effectuées que lorsque l'opération du terminal est appelée. Cette approche peut améliorer les performances.
    myList.stream()
          .filter(s -> s.length() > 3)
          .map(String::toUpperCase);
    
  6. Flux parallèles :

    • Utilisez parallelStream()des méthodes pour convertir des flux en flux parallèles afin d'exploiter pleinement les performances des processeurs multicœurs.
    myList.parallelStream()
          .filter(s -> s.startsWith("a"))
          .forEach(System.out::println);
    
  7. Collecteur personnalisé :

    • Si le collecteur standard ne répond pas à vos besoins, vous pouvez Collectorpersonnaliser le collecteur via l'interface.
    List<String> resultList = myList.stream()
                                    .collect(ArrayList::new,
                                             ArrayList::add,
                                             ArrayList::addAll);
    
  8. Utilisation du type facultatif :

    • Lors du processus d'utilisation des flux, vous pouvez l'utiliser Optionalpour gérer d'éventuelles situations nulles et éviter les exceptions de pointeur nul.
    Optional<String> result = myList.stream()
                                    .filter(s -> s.startsWith("a"))
                                    .findFirst();
    
  9. Opération composée :

    • Plusieurs opérations intermédiaires et terminales peuvent être combinées pour réaliser des opérations plus complexes.
    long count = myList.stream()
                       .filter(s -> s.length() > 3)
                       .map(String::toUpperCase)
                       .distinct()
                       .count();
    

Ces suggestions peuvent vous aider à utiliser correctement les flux dans Java 8 et à tirer parti de leur simplicité et de leur puissance.

Je suppose que tu aimes

Origine blog.csdn.net/wykqh/article/details/135074561
conseillé
Classement