我有一个ArrayList(称为filmes),其中一个元素是另一个ArrayList(称为actores),此actore由与电影中的电影具有相同电影ID的演员名称组成。
但是每次将actor添加到actores ArrayList时,它都会覆盖那里的前一个actor。
因此,当同一部电影有多个演员时,它只会显示文件中的最后一个。

例如,预期输出应为6978 |小中国的大麻烦1986年5月30日[库尔特·罗素(Kurt Russel),金·卡特尔(Kim Cattrall)] [喜剧],但它却在印刷6978 |小中国的大麻烦1986年5月30日[Kim Cattrall] [喜剧]

/*Actorsfile.txt (the last element is the movie id)
11701,Angelina Jolie,false,1995
6384,Keanu Reeves,true,603
7382,Carrie-Anne Moss,false,603
11701,Angelina Jolie,false,10428
6856,Kurt Russell,true,6978
2109,Kim Cattrall,false,6978*/


try{
        File ficheiroA = new File(Actorsfile);
        Scanner leitorFicheiroA = new Scanner(ficheiroA);

        while (leitorFicheiroA.hasNextLine()) {
            ArrayList<Actor> actores = new ArrayList<>();
            Actor actor = new Actor("");
            String linha = leitorFicheiroA.nextLine();
            String dadosA[] = linha.split(",");
            if (dadosA.length == 4) {
                int idFilmeA = Integer.parseInt(dadosA[3]);
                int pos = index(idFilmeA, ids);
                if (idFilmeA == ids[pos]) {
                    actor.nome = (dadosA[1]);
                    actores.add(actor);
                    filmes.get(pos).mudarActores(actores);

                }
            }
        }

    }
    catch(FileNotFoundException e) {
        String mensagem = "Erro: o ficheiro " + ficheiroActores + " nao foi encontrado.";
        System.out.println(mensagem);
    }


演员班:

public class Actor {
String nome;
String genero;

public Actor(String nome) {
    this.nome = nome;


}
public String toString () {
    return nome;
}
}


电影课:

public class Filme {
int id;
String titulo;
ArrayList<Actor> actores= new ArrayList<>();
ArrayList<GeneroCinematografico> generos= new ArrayList<>();
String dia,mes,ano;
public Filme(int id, String titulo,ArrayList<Actor> actores, ArrayList<GeneroCinematografico> generos,String ano,String mes,String dia) {
 this.id = id;
 this.titulo = titulo;
 this.actores = actores;
 this.generos = generos;
 this.ano=ano;
 this.mes=mes;
 this.dia=dia;
}


public void mudarId(int id) {
    this.id = id;
}

public void mudarTitulo(String titulo) {
    this.titulo = titulo;
}

public void mudarActores(ArrayList<Actor> actores) {
    this.actores =actores;
}

public void mudarGeneros(ArrayList<GeneroCinematografico> generos) {
    this.generos = generos;
}

public String toString() {
    return id + " | " + titulo + " | " + dia + "-" + mes + "-" + ano +" "+ actores +" "+ generos;
}


}

编辑:
我以不同的方式完成了它,现在在第一部电影中运行良好,但是下一部为空。
最近输出为603 |矩阵| 30-03-1999 [Keanu Reeves,Carrie-Anne Moss] [科幻小说],10428 |黑客| 1995年9月14日null [Action]但预期为603 |矩阵| 30-03-1999 [Keanu Reeves,Carrie-Anne Moss] [科幻小说],10428 |黑客| 1995年9月14日[安吉丽娜·朱莉] [行动]。如果能以这种方式做到这一点,而无需使用地图,我将非常感激。

try{
        File ficheiroA = new File(ficheiroActores);
        Scanner leitorFicheiroA = new Scanner(ficheiroA);
        i=0;
    while (i<ids.length-1) {
        int idFilme=ids[i];
        ArrayList<Actor> actores = new ArrayList<>();
        while (leitorFicheiroA.hasNextLine()) {

            Actor actor;
            String linha = leitorFicheiroA.nextLine();
            String dadosA[] = linha.split(",");
            int idFilmeA = Integer.parseInt(dadosA[3]);
            //int pos = index(idFilmeA, ids);
            if (dadosA.length == 4) {
                if (idFilmeA == idFilme) {
                    actor =new Actor (dadosA[1]);
                    actores.add(actor);
                }
            }
            filmes.get(i).mudarActores(actores);
        }

        i++;
    }

最佳答案

您在while内声明了一个新的ArrayList,因此它将重置每次迭代。您想要做的是将while之外的ArrayList的创建。代替:

while (leitorFicheiroA.hasNextLine()) {
            ArrayList<Actor> actores = new ArrayList<>();


你要:

ArrayList<Actor> actores = new ArrayList<>();
while (leitorFicheiroA.hasNextLine()) {


然后,当一会儿结束时,您调用filmes.get(pos).mudarActores(actores);

编辑:

为了解决您正在评论的问题,我将从当前位置删除filmes.get(pos).mudarActores(actores);。请注意,您拥有每个Actor中所需的所有信息。因此,我将保留当前的逻辑,而现在,可以将其放在函数readActoresFromFile()中,返回Actores列表。然后,我将遍历List的每个元素,并将它们放到一个以filmId作为Key并将该电影的Actor列表作为值的Map上。告诉我您是否需要帮助。

10-04 23:25