Java 8 - Flux ForEach Imbriquée avec différentes collections
J'essaie de comprendre le nouveau Java 8 Ruisseaux et j'ai essayé pendant des jours pour le transfert de imbriqués les boucles foreach sur la collecte en Java 8 Ruisseaux.
Est-il possible de refactoriser le suivant imbriqués les boucles foreach, y compris la si-les conditions dans Java 8-Flux?
Si oui, quel serait-il ressembler.
ArrayList<ClassInq> Inq = new ArrayList<>();
TreeMap<String, SalesQuot> Quotations = new TreeMap<>();
ArrayList<ClassInq> tempInqAndQuot = new ArrayList<>();
ArrayList<SalesQuot> tempQuotPos = new ArrayList<>();
for(ClassInq simInq : this.Inq) {
if(!simInq.isClosed() && !simInq.isDenied()) {
for(Map.Entry<String, SalesQuot> Quot: Quotations.entrySet()) {
SalesQuot sapQuot = Quot.getValue();
if(sapQuot.getInquiryDocumentNumber().compareTo(simInq.getSapInquiryNumber()) == 0) {
simInq.setSAPQuotationNumber(sapQuot.getQuotationDocumentNumber());
tempInqAndQuot.add(simInq);
for(Map.Entry<String, SalesQuotPosition> quotp : sapQuot.getPosition().entrySet()) {
tempQuotPos.add(quotp.getValue());
}
}
}
}
}
Merci beaucoup pour votre aide.
BR
Êtes-vous sûr que ce code est correct? Vous ajoutez le même objet plusieurs fois pour les mêmes collections, puisque vous appelez
Devrait
Salut, c'est vrai, la liste de tableaux doivent de type SalesQuotPosition
tempInqAndQuot.add(simInq)
dans la boucle interne.Devrait
tempQuotPos
être définie comme ArrayList<SalesQuotPosition>
?Salut, c'est vrai, la liste de tableaux doivent de type SalesQuotPosition
OriginalL'auteur user1796346 | 2014-08-18
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, essayez de respecter les conventions de nommage Java, comme vos noms de variables en majuscules faire, il est vraiment difficile de lire votre code. Deuxièmement, c'est une bonne chose que vous voulez vous renseigner sur
Stream
API, mais vous ne devriez pas ignorer les principes de base de la pré-Java 8Collection
Api.Il n'est pas utile d'effectuer une itération sur un
entrySet()
lorsque vous êtes uniquement intéressé en soit, des clés ou des valeurs. Vous le faites deux fois au sein d'un petit morceau de code.Lors de la première comparution, vous pouvez remplacer
avec le plus simple
À la seconde, l'ensemble de la
peut être remplacé par
Ainsi, même sans flux, votre code peut être simplifié à
si c'est toujours pas clair ce qu'il est censé faire, et si il est correct. Outre les erreurs et les soupçons nommé dans les commentaires à votre question, la modification des valeurs entrantes (esp. à partir de la boucle externe) ne pas regarder à droite.
Il n'est également pas clair pourquoi vous utilisez
….compareTo(…)==0
plutôt queequals
.Cependant, il peut être droite-forwardly réécrit pour utiliser les flux sans modifier le code de la logique:
Encore, je vous recommande le nettoyage de la logique initiale d'abord avant de le réécrire pour l'utilisation d'autres Api. La forme de flux bénéficierait grandement d'une définition plus précise de ce à atteindre.
OriginalL'auteur Holger