J'ai le code de recherche suivant en Java:
return getTableViewController().getMe().getColumns().stream().filter($->Database.equalsColumnName($.getId(), columnId)).findFirst().get();
Je souhaitais trouver la colonne par nom et renvoyer la première trouvée.
Je comprends qu'il y a un cas où rien n'a été trouvé et que cela devrait être traité, mais comment?
Est-ce ce qu'il veut en jurant:
'Optional.get()' without 'isPresent()' check
?
Comment réparer? Je souhaite revenir null
si rien n'a été trouvé.
MISE À JOUR
D'accord, d'accord, je n'avais tout simplement pas réalisé, ça findFirst()
revient Optional
.
$
comme identifiant en Java: JLS Sec 3.8 : "Le signe $ ne doit être utilisé que dans le code source généré mécaniquement ou, rarement, pour accéder aux noms préexistants sur les systèmes hérités."Réponses:
Remplacez
get()
parorElse(null)
.la source
orElse
commence par "ou"?else
c'est un mot-clé.orElse
place deget
carget
cela lèvera une exception si la valeur est nulle.orElseGet()
prend unSupplier<T>
, alors queorElse()
prend unT
. Ce ne sont pas des équivalents.orElse
; il n'y a aucune référenceorElseGet
dans son commentaire;)...findFirst().orElse(null);
Renvoie la valeur si présente, sinon renvoie
null
. La documentation dit que le paramètre passé peut êtrenull
(ce qui est interdit pourorElseGet
etorElseThrow
).la source
ma solution était de le vérifier de cette façon
if(item.isPresent()){ item.get().setId("1q2w3e4r5t6y") }
la source
Une option a été créée pour que le code puisse, après toutes ces décennies, enfin commencer à éviter la valeur null.
Supprimez le .get (), renvoyez le facultatif lui-même et faites en sorte que le code appelant le traite de manière appropriée (tout comme il devrait le faire dans le cas où vous retourneriez null).
la source