Profile picture of Philémon GLOBLÉHI
Philémon GLOBLÉHI
Développeur Java
Follow me
Generated by linktime
September 4, 2025
Astuce Java : orElse() vs orElseGet() - Éviter le piège des Optional Voici un piège courant avec les Optional en Java. À partir d'une liste de rôles, nous voulons récupérer "Admin" en priorité, sinon "User" par défaut. Pourquoi le premier code pose problème ? Même si "ADMIN" est trouvé dans la liste, le code dans orElse() est toujours exécuté. Cela signifie que : • Le second stream() est créé inutilement • Le filter() pour "USER" s'exécute même si ce n'est pas nécessaire • L'exception IllegalStateException sera levée car "USER" n'existe pas dans la liste Pourquoi la solution fonctionne ? Avec orElseGet(), l'expression lambda n'est évaluée que si l'Optional est vide. Si "ADMIN" est trouvé, le code de fallback ne s'exécute jamais. Règle à retenir : ✅ orElse(value) : La valeur est toujours évaluée, même si elle n'est pas utilisée ✅ orElseGet(() -> value) : La valeur n'est évaluée que si l'Optional est vide Utilisez orElseGet() quand : • Le calcul de la valeur par défaut est coûteux • Le code peut lever des exceptions • Vous voulez éviter des effets de bord inutiles Vous pouvez utiliser orElse() quand : • La valeur par défaut est une constante simple (orElse("inconnu")) • Le calcul est très léger et sans effet de bord #Java #JavaDevelopment #Programming #Optional #StreamAPI #BestPractices #CleanCode #JavaTips #SoftwareDevelopment #Coding #JavaProgramming #CodeReview #TechTips #DeveloperLife #JavaBestPractices
Stay updated
Subscribe to receive my future LinkedIn posts in your mailbox.

By clicking "Subscribe", you agree to receive emails from linktime.co.
You can unsubscribe at any time.

92 Likes
September 4, 2025
Discussion about this post
Profile picture of Bilal Belkahla
Bilal Belkahla
ingénieur en développement d'applications web front-end
12 days ago
Mais c'est bizarre que orElse soit quand même exécuté. Pourtant son nom indique le contraire.
Profile picture of Thomas Broyer
Thomas Broyer
Software Engineer chez Atol Conseils et Développements
14 days ago
On est d'accord sur le message (orElse vs orElseGet) mais entre nous y a tellement de choses qui vont pas dans ces quelques lignes de code…
Profile picture of Fabien Recco
Fabien Recco
Tech Lead / Software Architect / Staff Engineer | Java & Kotlin
15 days ago
C'est l'une des erreurs les plus problématiques (surtout sur des traitements fonctionnels). Car les TU peuvent passer (en mode black box, sans verify not used ou pratiques du genre) et pourtant le code ne fait pas ce qu'il faut ! La Code Review est vraiment importante à ce niveau 😉 Ce qu'il faut garder en tête : Java est pass-by-value.