Je comprends comment collecter une valeur List
, mais je ne peux pas comprendre. Comment puis-je renvoyer un seul paramètre d'objet filtré sous la forme String
.
fee = new BigDecimal(fees
.stream()
.filter(p -> p.getTodate().isAfter(LocalDateTime.now()))
.filter(p -> p.getFromdate().isBefore(LocalDateTime.now()))
.filter(p -> p.getId().equals(id))
return fee;
Je vérifie d'abord que les frais sont à jour, car il pourrait y avoir des frais à venir et des frais qui ne sont plus valables. Ensuite, je fais correspondre l'identifiant avec les frais restants . Mais il manque alors du code entre le dernier filtre et le retour.
Je veux juste renvoyer String
à partir de l'objet Stream
(p.getFee) pour le constructeur BigDecimal
.
Je sais qu'il ne reste qu'un objet Stream
après les filtres.
Utilisez findFirst
pour renvoyer le premier élément de la Stream
qui transmet vos filtres. Il retourne une Optional
. Vous pouvez donc utiliser orElse()
pour définir une valeur par défaut au cas où Stream
serait vide.
fee = new BigDecimal(fees
.stream()
.filter(p -> p.getTodate().isAfter(LocalDateTime.now()))
.filter(p -> p.getFromdate().isBefore(LocalDateTime.now()))
.filter(p -> p.getId().equals(id))
.map(p -> p.getFee())
.findFirst()
.orElse(/*some default value*/));
Ce serait peut-être une meilleure approche:
fee = fees.stream()
.filter(p -> p.getTodate().isAfter(LocalDateTime.now()))
.filter(p -> p.getFromdate().isBefore(LocalDateTime.now()))
.filter(p -> p.getId().equals(id))
.map(p -> p.getFee())
.findFirst()
.map(BigDecimal::new)
.orElse(/*some default value*/);