Ajouter liste de tableaux à une autre liste de tableaux en java
Je vais avoir le code java suivant, dans lequel je suis en train de copier la liste de tableaux à une autre liste de tableaux.
ArrayList<String> nodes = new ArrayList<String>();
ArrayList NodeList=new ArrayList();
ArrayList list=new ArrayList();
for(int i=0;i<PropertyNode.getLength()-1;i++){
Node childNode = PropertyNode.item(i);
NodeList Children = childNode.getChildNodes();
if(Children!=null){
nodes.clear();
nodes.add("PropertyStart");
nodes.add(Children.item(3).getTextContent());
nodes.add(Children.item(7).getTextContent());
nodes.add(Children.item(9).getTextContent());
nodes.add(Children.item(11).getTextContent());
nodes.add(Children.item(13).getTextContent());
nodes.add("PropertyEnd");
}
NodeList.addAll(nodes);
list.add(NodeList);
}
Je veux que la "liste" tableau d'être dans ce format:
[[PropertyStart,a,b,c,PropertyEnd],[PropertyStart,d,e,f,PropertyEnd],[PropertyStart,......]]
Mais à partir du code ci-dessus, la "liste" de la matrice de sortie est considérée comme ceci:
[PropertyStart,a,b,c,PropertyEnd,PropertyStart,d,e,f,PropertyEnd,PropertyStart,....PropertyEnd]
Je pense que vous avez peut-être remarqué la différence. Je ne suis pas en mesure d'atteindre le résultat dans le format attendu.
Merci de me suggérer aucune solution!!
Merci à l'avance!!!!
- Ne pas utiliser des listes. Utiliser les types génériques, et vous verrez le problème...
- Veuillez commencer votre les noms de variables avec une lettre minuscule.
- Merci pour votre suggestion. Je vais corriger moi-même là.
Vous devez vous connecter pour publier un commentaire.
Alors vous avez besoin d'un
ArrayList
deArrayLists
:Noter que
NodeList
a été modifié pournodeList
. Dans Conventions De Nommage Java variables commencent par une minuscule. Les Classes commencent avec une majuscule.Votre Problème
Principalement, vous avez 2 problèmes majeurs:
Vous êtes à l'aide de l'ajout d'un
List
deString
s. Vous voulez unList
contenantList
s deStrings
.Note que bien que lorsque vous appelez l':
... tout vous dire, c'est pour ajouter tous les éléments de nœuds (ce qui est une liste de Chaînes de caractères) à la (mal nommée)
NodeList
, qui est à l'aide d'Objets et ainsi y ajoute que les cordes à l'intérieur. Ce qui m'amène au point suivant.Vous semblez confondre entre votre
nodes
etNodeList
. VotreNodeList
ne cesse de croître au fil du temps, et c'est ce que vous ajoutez à votre liste.Donc, même si à faire les choses, si nous étions à regarder à la fin de chaque itération à votre
nodes
,nodeList
etlist
, nous aimerions voir:i = 0
i = 1
i = 2
et ainsi de suite...
Quelques Autres Corrections
Suivre les Conventions de Nommage Java
De ne pas utiliser des noms de variables commençant par des majuscules. Donc, ici, remplacer
NodeList
avecnodeList
).En apprendre un Peu Plus Sur les Types
Vous dire "je veux que la "liste" array [...]". Ceci est source de confusion pour celui qui vous sera communiquer avec: Ce n'est pas un tableau. C'est une mise en œuvre de
List
soutenu par un tableau.Il y a une différence entre un type, une interface et une implémentation.
Utiliser des Génériques pour les Plus forts, en Tapant dans les Collections
Utilisation des types génériques, parce que le typage statique aide vraiment à ces erreurs. Aussi, l'utilisation des interfaces, si possible, sauf si vous avez une bonne raison pour utiliser le type de béton.
De sorte que votre code devient:
Suppression De Code Inutile
Vous pourriez finir avec la
nodeList
entièrement, et d'écrire la suite une fois que vous avez fixé vos types:Utilisez le bouton Droit de la Portée
Sauf si vous avez une très bonne raison de le faire, préfèrent utiliser le plus intérieur de la portée de déclarer des variables et de limiter leur durée de vie de leurs références et de faciliter la séparation des préoccupations dans votre code.
Ici vous pouvez ensuite déplacer
List<String> nodes
être déclarée à l'intérieur de la boucle (et oubliez lenodes.clear()
invocation).Une raison de ne pas le faire pourrait être de la performance, tant que vous voudrez peut-être éviter de recréer un
ArrayList
à chaque itération de la boucle, mais il est très peu probable que l'une préoccupation pour vous (et propre, lisible et maintenable code a la priorité sur les pré-code optimisé).SSCCE
Dernier mais non le moindre, si vous voulez de l'aide de nous donner l'exacte cas reproductibles avec un bref, autonome, exemple correcte.
Ici que vous nous donnez de votre programme de sorties, mais ne pas parler de la façon dont vous les avez, donc, nous allons supposer que vous avez une
System.out.println(list)
. Et vous confondu beaucoup de gens, je pense que la sortie que vous nous donnez n'est pas ce que vous avez.Ne serait-il pas juste être un cas de:
Répéter que nécessaire.
Cela devrait vous retourner une liste dans le format spécifié.
Le problème que vous avez est causée vous d'utiliser la même liste de tableaux NodeList sur toutes les itérations en main pour la boucle. Chaque itérations NodeList est complété par de nouveaux éléments.
Après la première boucle, NodeList a 5 éléments (PropertyStart,a,b,c,PropertyEnd) et liste a 1 élément (NodeList: (PropertyStart,a,b,c,PropertyEnd))
Après la deuxième boucle NodeList a 10 éléments (PropertyStart,a,b,c,PropertyEnd,PropertyStart,d,e,f,PropertyEnd) et liste a 2 éléments (NodeList (avec 10 éléments), NodeList (avec 10 éléments))
Pour obtenir vos attentes, vous devez remplacer
par
PS. Votre code n'est pas lisible, garder le code Java conventions ont readble code. Par exemple, est difficile à reconnaître, si NodeList est une classe ou un objet
Lancer la NodeList à l'intérieur de la boucle for et vous obtiendrez le résultat souhaité.
Explication:
NodeList est un objet qui reste le même tout au long de la boucle de l'ajout d'une même variable de liste dans une boucle ajoutera qu'une seule fois. La boucle est seulement l'ajout de ses variables dans une seule NodeList tableau par conséquent vous devez être voir
et NodeList contient [prostart, a,b,c,proend,prostart,d,e,f,proend ...]
Premier déclare extérieur Arraylist qui contient une autre intérieure Arraylist à l'intérieur
ArrayList> CompletesystemStatusArrayList;
Liste de tableaux systemStatusArrayList
CompletesystemStatusArrayList=new ArrayList
systemStatusArrayList=new ArrayList();