2014-09-15 3 views
0

J'ai une VO composite comme ci-dessous;Java Fusionner 2 listes séparées à l'intérieur de la boucle

MyCompositeVO { 
    MyActionVO myAction; 
    MyPartnerVO partner; 
} 

Je veux retourner une liste de cet objet composite comme ci-dessous;

List<MyCompositeVO> results = new ArrayList<MyCompositeVO>(); 

Également par l'exécution de la requête, j'obtiens les listes ci-dessous 2;

List<MyAction> myActions; 
List<MyPartnerVO> myPartnerVOList; 

Il existe un attribut commun dans chacune de ces classes; myPartnerId (peut être utile pour la fusion)

Maintenant, je veux faire une boucle sur ces listes et retourner la sortie fusionnée. Mon code approximatif pour la même chose ressemble à ci-dessous; Comment puis-je fusionner les 2 boucles ci-dessus et retourner la sortie finale dans "résultats"?

Note: Il est possible qu'il n'y a rien dans « myActions » et dans ce cas compositeVO.setMyAction() doit être définie comme nulle

+0

La taille des deux listes est-elle la même? – SJuan76

+0

Non ... comme je l'ai dit, l'un d'eux peut être vide – testndtv

Répondre

0

Vous avez besoin d'une boucle externe qui passe par vos partenaires (Je suppose de votre description qu'ils sont la partie importante de l'objet final). Pour chaque partenaire, vous faites ensuite une boucle et recherchez une action correspondante.

Mon code ci-dessous suppose la présence de quelques fonctions et suppose que votre action sera convenablement null si aucun correspondant n'est trouvé.

for (MyPartnerVO myPartner : myPartnerVOList) { 

    MyCompositeVO compositeVO = new MyCompositeVO(); 
    compositeVO.setPartner(myPartner); 

    for (MyAction action : myActions) { 
    if (action.getPartnerID() == myPartner.getID()) { // or .equals() 
     MyActionVO myActionVO = new MyActionVO(); 
     myActionVO.copyPropertiesFrom(action); 
     compositeVO.setMyAction(myActionVO); 
     break; 
    } 
    } 

    results.add(compositeVO); 
} 
Questions connexes