Je veux refroidir ce code pour utiliser Lambda Expression Java 8
for(int i = 0; i < customers.getCUSTOMER().size(); i++){ if (customers.getCUSTOMER().get(i).getINCOME().getGROSSMONTH1().toBigInteger() < customers.getCUSTOMER().get(i).getINCOME().getNETTSALMONTH1().toBigInteger()){ log.error("") throw new RuntimeException(); } }
5 Réponses :
customers.getCUSTOMER().stream().forEach(customer -> { if(customer.getINCOME().getGROSSMONTH1().toBigInteger() < customer.getINCOME().getNETTSALMONTH1().toBigInteger()){ log.error(""); throw new RuntimeException(); } }); You should also try renaming your methods using camelcase, e.g getIncome() to make it easier to read and conform to normal Java writing standards.
customers.stream().filter(customer -> customer.getINCOME().getGROSSMONTH1().toBigInteger() < customer.getINCOME().getNETTSALMONTH1().toBigInteger()) .findAny().ifPresent(c -> { log.error("") throw new RuntimeException(); });;
Vous êtes itération sur les éléments de vous utilisez le Il existe différentes façons d'aller de là, mais depuis que vous «Je lance une exception lorsqu'une condition est satisfaite, j'irais personnellement avec qui produit un résultat booléen Cela vous dit si un élément satisfait à la condition, et cela cesse de regarder dès qu'il en trouve un (et le prédicat pour le puisque vous lancez un D'autre part, si vous souhaitez enregistrer des informations sur l'élément qui a échoué, vous devez le faire à l'intérieur du flux. . De plus, dans ce cas, vous voudrez peut-être ignorer la carte Notez que cela ne résout pas l'exception vérifiée problème. Vous ne pouvez pas lancer une exception vérifiée de l'intérieur du clients.getCustomer () code>, qui semble être une liste
code> (et je suppose aux fins de cette réponse qu'il est un ). Vraisemblablement, alors, vous allez traiter que le flux de cette liste:
getincome () code> de chaque élément deux fois, et pas d'autre aspect De tout, vous voulez peut-être cartographier des éléments via cette méthode. Suppolant que les éléments de la liste des clients sont de type
client code>, qui pourrait être p>
flux.anyMatch () code>: p>
AnyMatch () code> est une Lambda). Vous l'utiliseriez dans un
si code> expression similaire à celui que vous avez maintenant: p>
runtimédiexception Code>, il serait également possible de le faire avec une Lambda, à l'intérieur du flux, mais c'est pas em> généralement possible si vous lancez une exception vérifiée. Dans le cas à l'exception vérifiée, quelque chose le long des lignes présenté ici est généralement nécessaire. P>
() code>. Vous pouvez au contraire
filtre () code> en fonction du prédicat et
FindFirst () code> parmi les éléments, le cas échéant, restant (ou
Findery () code> si Vous ne vous souciez pas de savoir si c'est le premier que vous rapportez). Le résultat est un
en option code>, que vous pouvez traiter, le cas échéant, avec un autre lambda: p>
ifpresent code> lambda. P> p>
à l'aide des flux Java-8, utilisez Filtre Code> pour condition et
FindFirst code> pour terminer après une correspondance
customers.getCUSTOMER().stream()
.filter(c->c.getINCOME().getGROSSMONTH1().toBigInteger() < c.getINCOME().getNETTSALMONTH1().toBigInteger())
.findFirst()
.ifPresent(cu->{
log.error("")
throw new RuntimeException();
});
Ce dont vous avez besoin dans ce cas est un puis utilisez-le comme suit cette p> bipredicate
boolean shouldThrowException = customers.getCUSTOMER()
.stream()
.anyMatch(cust -> {
TypeOfMonth tom1 = getINCOME().getGROSSMONTH1();
TypeOfMonth tom2 = getINCOME()..getNETTSALMONTH1();
return biPredicate.test(tom1, tom2);
});
if (shouldThrowException) {
log.error("");
throw new RuntimeException();
}
Dupliqué possible de Fonction Java 8 Lambda qui jette une exception?
@Paul - C'est une exception décochée, il n'y a donc aucun problème à le jeter.
Au fait, vous ne pouvez pas comparer
biginteger code> en utilisant
<< / code>
D'accord, donc
clients.getcustomer (). Stream (). Filtre (C -> C.Getincome (). GetgrossMonth1 (). Tobiginteger (). Catégorie (). Getnettsal Month1 (). .Tobigintege r ()) == -1) .Findany (). Ifpresent (c -> {jetez Nouvelle RunTimeException ();}); code> devrait suffire.
@Stephenc i d'abord les convertit en Integer puis utilisez <, quelle est la bonne façon de vérifier si plus grand que d'utiliser BigInteger
Utilisez la méthode comparète. Mais avez-vous vraiment besoin d'utiliser
BigInteger code> du tout? Vous attendez-vous vraiment à soutenir les revenus>
9.223372e + 18 code> cents?