0
votes

ArrayList Inside ArrayList, comment puis-je effacer le dernier

J'utilise tout en boucle pour lire un fichier texte et créer de nouvelles arraychistes sur des portions du fichier texte, puis placez ces arraychistes dans une autre arraylist. Mon problème est que je ne sais pas comment ajouter mon arraylist temporaire d'analyse de la mainaliste, puis de l'effacer pour la boucle suivante sans affecter toutes les arraylistes d'analyse à l'intérieur de l'arraylist Mainaliste. Plus d'infos à l'intérieur des commentaires ci-dessous dans le code.

Ceci est un code exemple, il s'agit d'un fichier plus important. Il est raccourci mais a toutes les pièces mobiles xxx

le fichier lue est comme ceci:
un
b
C
d

F
g

h
i
j
k
l

etc ..


1 commentaires

Essayez de faire mainalisaliste.add (parse.copy ()) à la place, vous ajoutez une copie de la liste au lieu d'ajouter la liste elle-même plusieurs fois. Cela, ou déplacez la ligne où vous créez Analysez à l'intérieur du pendant que boucle de sorte qu'il en fait un nouveau à chaque fois.


3 Réponses :


0
votes

Il y a deux problèmes avec votre approche actuelle:

  1. Anse utilisera la même référence pour tous les arraylistes internes, donc lorsque vous appelez pars.clear () Il videra toutes les listes intérieures de votre mainalisateur < / code>. Cela peut être résolu en créant une copie de la liste parse lorsque vous l'ajoutez (c'est-à-dire mainalisaliste.add (nouveau arraylist <> (parse)); )
  2. Vous souhaitez effacer la liste à l'intérieur du si, après avoir ajouté la copie à votre mainaliste .

    En outre, je suppose que vous ne voulez pas que les lignes vides ajoutées à la liste intérieure individuelle. Vous pouvez donc lire la ligne d'abord et ajouter la liste complète à Mainaliste et clair parse à l'intérieur de l'instruction IF ou ajoutez la ligne au parse -list.

    une alternative légèrement meilleure, c'est simplement créer un Nouvelle liste à la place, vous n'aurez donc pas besoin du effacer et de créer une copie de la liste.

    au total: xxx < p> Essayez-le en ligne.


0 commentaires

0
votes

Essayez ceci au lieu d'effacer la liste à chaque fois.

ArrayList<ArrayList<String>> mainAList = new ArrayList<ArrayList<String>>();

try (Scanner filereader = new Scanner(Paths.get("name_of_file.txt"))) {
    while (filereader.hasNextLine()) {
        ArrayList<String> parse = new ArrayList<>();
        parse.add(filereader.nextLine());
        if (parse.get(parse.size()-1).length() == 0 || !filereader.hasNextLine()) {
         mainAList.add(parse);
        }
   }
}


0 commentaires

0
votes

Votre problème est que votre mainaliste sera vide à la fin, car les objets sont des types de référence. Afin de résoudre ce problème, vous devez ajouter une copie de parse dans le mainaliste et non la liste arrayliste elle-même

Remplacez ceci Ligne xxx

avec cette xxx


0 commentaires