2017-10-09 7 views
-2

Je les classes suivantes:java: convertir l'objet à la liste

public class UnidadOrganicaArbol { 

protected long codigo; 
@XmlElement(required = true) 
protected String denominacion; 
protected boolean tieneOficinaRegistro; 
protected int prelacion; 
@XmlElement(required = true) 
protected UnidadesOrganicasArbol subunidades; 

/*getters and setters*/ 
} 

et ont également

public class UnidadesOrganicasArbol 
extends ListadoBase 
{ 

protected List<UnidadOrganicaArbol> unidadOrganicaArbol; 


public List<UnidadOrganicaArbol> getUnidadOrganicaArbol() { 
    if (unidadOrganicaArbol == null) { 
     unidadOrganicaArbol = new ArrayList<UnidadOrganicaArbol>(); 
    } 
    return this.unidadOrganicaArbol; 
} 

Comme vous pouvez le voir, UnidadOrganicaArbol classe Hass un attribut subunidades qui est une classe UnidadesOrganicasArbol, qui a un attribut List<UnidadOrganicaArbol>. J'ai donc une classe UnidadOrganicaArbol qui contient un attribut List<UnidadOrganicaArbol>.

LET'S dire que j'ai:

enter image description here

Connaissez-vous un algorithme général pour convertir uoa1 (ou tout autre objet UnidadOrganicaArbol) et ses enfants dans une liste où je peux garder leurs cartes d'identité et id les parents des enfants?

J'ai essayé plusieurs façons mais sans succès. Merci d'avance.

+0

Ainsi, vos SubUnidades peuvent également contenir des listes d'autres Unidades? À première vue, cela ressemble à un problème qui peut être résolu en appliquant le pattern composite (voir: https://en.wikipedia.org/wiki/Composite_pattern) – deHaar

+0

Vous avez votre liste de 'UnidadOrganicaArbol' dans' UnidadesOrganicasArbol' confondre avec les noms essayer de fournir des noms génériques – Kathi

+1

Qu'avez-vous essayé? C'est une fonction récursive simple. – daniu

Répondre

0
public List<UnidadOrganicaArbol> collectToList(UnidadOrganicaArbol arbol) { 
    List<UnidadOrganicaArbol> result = new ArrayList<>(); 
    result.add(arbol); 
    UnidadesOrganicasArbol children = arbol.getUnidadesOrganicasArbol(); 
    if (children != null) { 
     for (UnidadOrganicaArbol child : children.getUnidadOrganicaArbol()) { 
      result.addAll(collectToList(child)); 
     } 
    } 
    return result; 
} 

vous donnera la liste [\, 7, 3, 6, 4, 5, 1, 2] pour l'image ci-dessus.

+0

merci beaucoup. ça a marché. – bentakayze