Astuce Java simple, mais puissante…
Quand je traite de gros volumes de données avec les streams, je fais toujours attention à l’ordre des opérations.
Appeler .parallel() avant .filter() et .map() pour profiter du traitement parallèle.
Ce genre de petit détail peut faire toute la différence quand on pense scalabilité et architecture robuste.
----
PS : Vous avez un besoin en architecture backend Java robuste ?
Réservez un rendez-vous : https://lnkd.in/ecRArCmt
Ingénieur Concepteur Développeur | J’accompagne les entreprises dans la modernisation, la refonte et le développement d’applications web sur mesure
4 months ago
Très bonne remarque, et tu as totalement raison de souligner l’importance de l’ordre des opérations dans les streams, ça change tout niveau perfs et scalabilité.
Petite nuance néanmoins : .parallel() avant .filter() n’est pas toujours optimal. Par exemple, si filter() élimine 70% des données, tu engages inutilement plusieurs threads pour traiter ce qui va de toute façon être jeté. Dans ce cas, filtrer avant de paralléliser peut être bien plus efficace.
Dans l’exemple que tu proposes, on ne connaît pas à l’avance combien de personnes ont plus de 18 ans. Il se peut que la majorité soient concernées… mais il est tout aussi possible que très peu le soient.
C’est justement pour ça qu’il peut être plus judicieux de filtrer d’abord sur l’âge : on réduit ainsi le nombre d’éléments à traiter. Ensuite, si le traitement est coûteux et que le volume restant le justifie, on peut paralléliser à ce moment-là.
👉 L’idée, c’est de ne paralléliser que ce qui en vaut la peine, pas tout par défaut.
Donc personnellement le mieux, on réduit la taille avant de paralléliser
users.stream()
.filter(person -> person.getAge() > 18)
.parallel()
.map(this::expensiveOperation)
.toList();