Maison >Java >javaDidacticiel >Article Donner la préférence aux fonctions sans effets secondaires dans les streams
Introduction à l'utilisation des flux :
Structure du calcul :
Effets secondaires :
Exemple 1 : Code avec effets secondaires
Map<String, Long> freq = new HashMap<>(); try (Stream<String> words = new Scanner(file).tokens()) { words.forEach(word -> { freq.merge(word.toLowerCase(), 1L, Long::sum); }); }
Problème : Ce code utilise forEach pour modifier l'état externe (freq). Il est itératif et ne profite pas des streams.
Exemple 2 : Code sans effets secondaires
Map<String, Long> freq; try (Stream<String> words = new Scanner(file).tokens()) { freq = words.collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting())); }
Solution : Utilise le collecteur Collectors.groupingBy pour créer la table de fréquences sans changer l'état externe. Plus court, plus clair et plus efficace.
Appropriation de l'API streams :
Collectionneurs :
Exemple 3 : Extraire une liste des dix mots les plus fréquents
List<String> topTen = freq.entrySet().stream() .sorted(Map.Entry.<String, Long>comparingByValue().reversed()) .limit(10) .map(Map.Entry::getKey) .collect(Collectors.toList());
Explication :
Complexité de l'API Collectors :
Cartes et stratégies de collecte :
Exemple 4 : Utilisation de toMap avec la fonction de fusion
Map<String, Long> freq; try (Stream<String> words = new Scanner(file).tokens()) { freq = words.collect(Collectors.toMap( String::toLowerCase, word -> 1L, Long::sum )); }
Explication :
Exemple 5 : Regrouper les albums par artiste et trouver l'album le plus vendu
Map<Artist, Album> topAlbums = albums.stream() .collect(Collectors.toMap( Album::getArtist, Function.identity(), BinaryOperator.maxBy(Comparator.comparing(Album::sales)) ));
Explication :
Collection de chaînes :
Collectors.joining pour concaténer des chaînes avec des délimiteurs facultatifs.
Exemple 6 : Concaténation de chaînes avec délimiteur
String result = Stream.of("came", "saw", "conquered") .collect(Collectors.joining(", ", "[", "]"));
Explication :
Conclusion :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!