我今天遇到的问题是我必须创建一个arrayList并在其中存储有关外部文件的电影信息。但是,我必须在我的arrayList中创建一个ADDS电影的方法。问题是它必须比较正在添加的电影是否已存在于我的arrayList中。但是,我只知道如何从文件中读取并将其作为字符串存储在我的arrayList中。有关如何使其工作的任何想法?
我的库存类执行以下操作(目前):
private ArrayList<String> movieList;
public Inventory() throws IOException{
BufferedReader br = null;
this.movieList = new ArrayList<String>();
try {
br = new BufferedReader(new FileReader("movieBase"));
String str;
while ((str = br.readLine()) != null) {
movieList.add(str);
System.out.println(str);
}
br.close();
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e){
System.out.println(e);
}
}
public void addMovie(String title, int year, int duration, double rating){
movie newMovie = new movie (title, year,duration,rating);
for(String str : movieList){
}
}
}
编辑**(我认为包含此内容是个好主意)我的外部文件如下所示:
美国队长:冬兵 - 2014 - 136 - 3.5
Birdman - 2014 - 119 - 3.7
Batman - 1989 - 126 - 3.2
印第安纳琼斯和水晶头骨王国 - 2008 - 122 - 2.6金刚 - 1933 - 100 - 3.8
鸭汤 - 1933 - 68 - 3.5
Casablanca - 1942 - 102 - 3.9
Citizen Kane - 1941 - 119 - 3.7
唐人街 - 1974 - 130 - 3.6
教父 - 1972 - 175 - 3.9
Skyfall - 2012 - 143 - 3.2
Forest Gump - 1994 - 142 - 3.8
The Matrix - 1999 - 136 - 3.4
大白鲨 - 1975 - 124 - 3.3
阿拉伯的劳伦斯 - 1962 - 216 - 3.5
美国人在巴黎 - 1951 - 113 - 2.9
答案 0 :(得分:1)
问题在于它必须比较正在添加的电影 已存在于我的arrayList中。
听起来你想要使用Set
,甚至可能使用SortedSet。 List
允许Set
不允许重复,因此如果您坚持使用List
,则必须明确检查List
是否包含'{1}}给了电影。
您需要覆盖Movie对象上的hashCode()
和equals()
方法才能执行此操作。
修改强>:
既然您已经更清楚地表明了您的要求(您想要一个频率表),我会说您可以使用地图(例如Map<Movie, Integer>
)。
答案 1 :(得分:0)
您是否尝试过覆盖equals
和hashcode
方法?阅读this文章中的第8项和第9项。
1.在Movie类中重写equals
public class Movie{
// properties and methods
// override hashcode
@override
public boolean equals(Object obj){
if( this == obj) {
return true;
}
if(!( obj instanceof Movie)){
return false;
}
Movie input = (Movie) obj;
if(this.gerTitle().equls(input.getTitle()) &&
this.getYear().equals(input.getyear()) &&
this.getDuration().equals(input.getDuration()) &&
this.getRating().equals(input.getrating())){
return true;
}
return false;
}
}
public void addMovie(String title,int year, int duration, double rating)
{
// List to store all your movies
List movieObjList= new ArrayList();
for(String str : movieList)
{
//Split the string to get title, year, duration and reading separately
String s[] = str.split("-");
//Create Movie object
Movie m = new Movie ();
m.setTitle(s[0]);
m.setYear(s[1]);
m.setDuration(s[2]);
m.getrating(s[3]);
//check movieObjList contains this movie already and do the logic.
if(movieObjList.contains(m))
{
// logic to increase the count
}
//add the movie to list
movieObjList.add(m);
}
}