【问题标题】:Updating ArrayLists that contains each other?更新包含彼此的 ArrayLists?
【发布时间】:2020-06-29 08:58:31
【问题描述】:

抱歉,如果有类似的问题,我真的不知道如何调用这个概念来搜索问题。

所以我需要创建一个包含 3 个类的数据库,如下所示:

public class Actor {
    private String name;
    private ArrayList<Movie> movies; //all movies the actor has been in
}

public class Movie {
    private String name;
    private ArrayList<Actor> actors;
}

public class MovieDatabase {
    private ArrayList<Movie> movieList;
    private ArrayList<Actor> actorList; //all actors in the movie
}

我必须创建一个将电影和演员添加到数据库的方法。 最终目标是新电影需要属于 Movie 类,并且包含其中的所有演员,对于新演员也是如此。

我想不通的是,既然 Movie 类包含一个 Actor 对象数组,而 Actor 类包含一个 Movie 列表数组,那么您如何更新以便最终添加的新 Movie 包含一个完整的其中的 Actor 列表,列表中的每个 Actor 的电影列表都使用新的 Movie 对象更新?

在这种情况下,递归是正确的概念吗?

【问题讨论】:

  • 您是要使用实际的数据库,还是只是关于您创建的 MovieDatabase 类的问题?
  • Actor 和 Movies 类应该有设置器,以便在更新 Movies 时,您可以为每个将电影设置给他的演员进行更新。
  • @Rick 抱歉,我可能措辞不正确,我指的是 MovieDatabase 类
  • @SabareeshMuralidharan 谢谢,但添加的电影不完整吗?由于新电影首次创建时,其中的演员列表将是空白的。如果它被添加到演员的电影列表中,它实际上不会是一个完整的 Movie 对象,对吧?我觉得之后它会陷入无限循环,用 Actor 更新 Movie,然后用修改后的 Movie 更新 Actor,然后用修改后的 Actor 再次更新 Movie,等等
  • 看看什么时候没有完成点,这将是一场比赛,但在这里您可以从电影对象更新开始。更新它的电影名称,并在获取演员时检查特定演员是否已经存在。如果是,请将这部电影更新到他的列表中。如果不是,请创建一个新演员并将这部电影更新给他/她

标签: java


【解决方案1】:

假设添加了一部新电影

Movie movie = new Movies();

movie.setActors(listOfActors)

现在你需要为每个演员更新电影列表

listOfActors.forEach(actor -> addMovieToActor(movie,actor));


public addMovieToActor(Movie movie,Actor actor){

   List<Movies> existingMovies =actor.getMovies();

   existingMovies.add(movie);
}

根据您的需要,您可能需要注意更新之间的同步。

【讨论】:

  • 感谢您的回答,我认为我的问题与同步有关。您如何实际同步,以便添加到电影列表中的新电影将包含一个演员列表,其电影列表已更新为同一新电影?
  • 我认为你不能一口气完成。一个会一个接一个地更新。必须先做点什么。电影或演员。
【解决方案2】:

我认为递归在这里不合适,尽管您可以使用它。数据库具有循环依赖关系,因此您只需要在更新后进行同步。换句话说,确保在添加新条目后,两个数据库都使用缺失的信息进行更新。将ArrayList 换成HashMap 可以使同步变得更容易,您可能需要重构您的类来执行此操作。为简单起见,我省略了列表,您可以将它们作为参数添加:

void update(String movieName, String actorName) {
    if (movies.get(movieName) == null) {
        movies.put(movieName);
    } 
    if (actors.get(actorName) == null) {
        actors.put(actorName);
    }
}

用作:

HashMap<String> actors = new HashMap<>();
HashMap<String> movies = new HashMap<>();
actors.put("foo");
movies.put("bar");
// Update happened, synchronize with what you just added
update("foo", "bar");

【讨论】:

  • 感谢您的回答。循环依赖是我一直在寻找的关键字,非常感谢。不幸的是,我需要使用 ArrayList。
猜你喜欢
  • 1970-01-01
  • 2012-02-29
  • 2013-12-23
  • 1970-01-01
  • 2013-12-05
  • 2014-01-18
  • 1970-01-01
  • 2014-07-02
  • 2016-03-29
相关资源
最近更新 更多