当前位置: 首页 > 知识库问答 >
问题:

如何为数组中的每个对象创建数组?

彭开畅
2023-03-14

我有一个从列表中选择项目的代码,我有一个扫描器来扫描文件(每行有电影,然后是演员),并将电影添加到数组中。我该怎么做才能让它添加到arraylist中的每一部电影都能在线存储紧随其后的演员?例如:每行有一行是电影名(日期)/LastName、FirstName/Lastname2、Firstname2/等等。我的代码包含一个类电影,它将电影名称转换为字符串。我怎么能在任何给定点搜索任何电影,并让它调出所有主演该电影的演员?

 public void loadDataFromFile(String fileName){
    /**
     * This method takes in one parameter, a file name, and prints out the data from that file
     */
    Scanner theScanner3 = null;
    myMovies = new ArrayList<Movie>();
        try{    
         theScanner3 = new Scanner(new FileInputStream(fileName));}

        catch(Exception ex){
            System.err.println("IndexOutOfBoundsException: " + ex.getMessage());
            }

        while( theScanner3.hasNextLine()){
        int i = 1;
        i = i+1;
            Movie foo = new Movie(theScanner3.nextLine());
            myMovies.add(foo);

        }
        theScanner3.close();
        }

我需要能够搜索一部电影的名字,并让它返回给我的每一个演员在同一行的电影。然而,我不知道该怎么做。

共有3个答案

松桐
2023-03-14

您的Movie类可以存储您想要保存的关于每部电影的所有信息。这可以包括电影中所有演员的列表。它还可以包括从扫描仪创建电影的方法:

class Movie {
    private final String name;
    private final Person director;
    private final List<Person> actors;
    private final int yearOfRelease;

    public Movie makeFromScanner(Scanner movieScanner) {
        Movie movie = new Movie();
        movie.yearOfRelease = movieScanner.nextInt();
        ...
        return movie.
    }

    public boolean hasActor(Person actor) {
        return actors.contains(actor);
    }
}

如果将电影列表存储为列表:

List<Movie> movies;

然后,例如,找到所有有特定演员的电影将是:

Set<Person> moviesWithActor = movies.stream()
    .filter(movie -> movies.hasActor(myActor))
    .collect(Collectors.toSet());

或者为一部电影找到所有的演员:

Set<Person> actorsForMovie = movies.stream()
    .filter(movie -> movie.hasName(myMovie))
    .collect(Collectors.toSet());

虽然使用Map之类的工具来快速查找电影名称显然更有效,但除非你有数百万部电影或每秒搜索很多次,否则没有必要进行彻底搜索:彻底搜索就可以了。

马涵蓄
2023-03-14

它在键(本例中为电影)和值(本例中为演员列表)之间建立了关系。

把它看作是按电影分类(分组)的演员的集合。

宣言:

Map<Movie, List<Actor>> actorsByMovies = new HashMap<>();

添加电影:

Movie newMovie = ...
actorsByMovies.put(newMovie, new ArrayList<>());

从电影中获得演员:

Movie myMovie = ...
List<Actor> actors = actorsByMovies.get(myMovie);

获取所有电影:

Set<Movie> allMovies = actorsByMovies.keySet();

检查电影:

Movie myMovie = ...
boolean doesMovieExist = actorsByMovies.containsKey(myMovie);

这里是进一步的参考。

希望这有帮助<祝你好运。

卜方伟
2023-03-14

与其将myMovies设置为ArrayList,不如将其设置为Map。但在此之前,您需要创建一个单独的阵列列表,由该电影的演员组成。所以它将是:

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

然后:

Map<Movie, ArrayList<String>> myMovies = new HashMap<Movie, ArrayList<String>>();

您想在阅读所有行之前创建myMovies,如果您想随时访问它,甚至可以将其设置为全局变量。为了获得该特定电影的所有演员,您可以执行以下操作:

ArrayList<String> movieActors = myMovies.get([movie_object]);
String firstActor = movieActors.get(0);

例如:

Map<Movie, ArrayList<String>> myMovies = new HashMap<Movie, ArrayList<String>>();
...
while(theScanner3.hasNextLine()) {
    int i = 1;
    i += 1
    ArrayList<String> actors = new ArrayList<String>();
    //
    //do some splits using delimiters to separate out name of the movie and actors
    //for example, let's say the strings are in an array called 'split'
    //where split[0] is the movie title
    //and everything that follows afterwards are the actor names
    //
    String movieName = split[0]
    for(int j = 1; j < split.length; j++) {
        actors.add(split[j]);
    }
    //creating the objects
    Movies foo = new Movie(movieName);
    //now to store the movie and the arraylist of actors into myMovies
    myMovies.put(foo, actors);
    ...

实现这一点的另一种方法是将演员的名字放在电影对象中。这样你就可以调用create并调用某部电影的get方法,这个方法可以返回演员的名字列表。

 类似资料:
  • 问题内容: 我有一个需要将对象数组存储在变量中的要求。对象是不同类型的。请参考以下示例: 注意第二个元素是字符串本身的数组。经过研究,我想将其存储为以下接口类型: 尽管如此,我还是遇到了一些无法找到的编译错误。 问题答案: 您要的是可能的- 游乐场链接: 但是您可能不想这样做。您正在与类型系统进行斗争,如果您这样做,我会质疑您为什么要使用Go。考虑利用类型系统- 游乐场链接:

  • 我试图创建一个由子类定义的对象数组(我认为这是正确的术语)。我可以看到这个问题反复出现,但实现仍然存在问题。 我的代码 给出错误 线程“main”java.lang.NullPointerException中出现异常。 为了使其合理化,我将其分解为最简单的术语: 这似乎奏效了。我只是看不出我的两个例子有什么不同。我知道我的第一个没有意义,但是MyClass最终会包含更多的数据。) 我很肯定这个问题

  • 有没有一种方法,每当I$push monodb数组中的新元素时,都会向它添加一个普通的_id?我记得mongoose是自动执行类似操作的,但现在我使用mongodb的原生js,它似乎没有插入任何id。 示例: 执行时,messages数组应具有常规的_id字段、message和date。目前它只创建消息和日期。

  • 问题内容: 我有以下代码片段,我不明白为什么它不起作用: 有人能指出我正确的方向吗? 我已经看到JonSkeet在另一个问题上的回答,但是那里的最后一个示例对我来说不起作用。即使我将强制类型转换添加到标记为的行或行中,也会出现编译错误。 问题答案: 您始终可以通过明确指定type参数来告诉Java您想要列表:

  • 问题内容: 在Python中,可以向1构造函数传递一系列键值对: 除了为此目的定义我自己的函数外,我想不出其他任何方法来在JavaScript中执行此类操作: 但是我是JS新手…这种对对对象转换是否内置任何内容? 1出于这个问题的目的,我将Python字典视为JS对象的Python副本,尽管当然相似性仅限于它们都是键值集合这一事实。 问题答案: 在撰写本文时(2013年),JavaScript对象

  • 我需要创建一个对象(银行),其中包含一组客户端和bankID。我的问题是,我不知道如何在主函数中创建银行。 银行类别: 客户端类: 主要类别: 这些是问题所在: 你必须创建一个程序来模拟银行活动。该系统包括以下模块:银行—客户(客户数组)— idBank(字符串)5 BancAccount — accountNumber(字符串)—金额(浮点)客户—姓名(字符串)—地址(字符串)—账户(银行账户数