我有一个从列表中选择项目的代码,我有一个扫描器来扫描文件(每行有电影,然后是演员),并将电影添加到数组中。我该怎么做才能让它添加到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();
}
我需要能够搜索一部电影的名字,并让它返回给我的每一个演员在同一行的电影。然而,我不知道该怎么做。
您的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
之类的工具来快速查找电影名称显然更有效,但除非你有数百万部电影或每秒搜索很多次,否则没有必要进行彻底搜索:彻底搜索就可以了。
它在键(本例中为电影)和值(本例中为演员列表)之间建立了关系。
把它看作是按电影分类(分组)的演员的集合。
宣言:
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);
这里是进一步的参考。
希望这有帮助<祝你好运。
与其将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(字符串)—金额(浮点)客户—姓名(字符串)—地址(字符串)—账户(银行账户数