Top five Common mistakes Developers make when using Java Streams and How to Avoid Them
Table des matières
ToggleApprenez à éviter les pièges courants et à tirer le meilleur parti des Streams Java.
Problème : Modifier une collection pendant qu'elle est traitée provoque des erreurs comme ConcurrentModificationException
.
Solution : Créez une nouvelle collection pour stocker les résultats.
List<Integer> transformedList = list.stream() .map(x -> x + 1) .collect(Collectors.toList());
Problème : Les Streams ne peuvent pas être réutilisés après une opération terminale.
Solution : Créez un nouveau Stream pour chaque opération.
List<String> list = List.of("a", "b", "c"); list.stream().forEach(System.out::println);
Problème : Les Streams parallèles peuvent entraîner des problèmes de concurrence ou ralentir le traitement de petites collections.
Solution : Utilisez-les uniquement pour des collections volumineuses.
list.stream().forEach(System.out::println); // Stream séquentiel
Problème : Ajouter des effets de bord complique la maintenance et entraîne des comportements imprévisibles.
Solution : Utilisez peek()
pour inspecter les valeurs sans modifier l’état externe.
list.stream() .peek(System.out::println) .map(x -> x * 2) .collect(Collectors.toList());
Collectors.toMap
Problème : Les collisions de clés entraînent une IllegalStateException
.
Solution : Fournissez une fonction de fusion pour gérer les collisions.
Map<Integer, String> map = List.of("apple", "bat", "ant").stream() .collect(Collectors.toMap( String::length, Function.identity(), (existing, replacement) -> existing ));
Consultez l'article complet juste ici.