外部文件存储在arrayList

时间:2015-08-12 00:53:07

标签: java arraylist io

我今天遇到的问题是我必须创建一个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

2 个答案:

答案 0 :(得分:1)

  

问题在于它必须比较正在添加的电影   已存在于我的arrayList中。

听起来你想要使用Set,甚至可能使用SortedSet。 List允许Set不允许重复,因此如果您坚持使用List,则必须明确检查List是否包含'{1}}给了电影。

您需要覆盖Movie对象上的hashCode()equals()方法才能执行此操作。

修改: 既然您已经更清楚地表明了您的要求(您想要一个频率表),我会说您可以使用地图(例如Map<Movie, Integer>)。

答案 1 :(得分:0)

您是否尝试过覆盖equalshashcode方法?阅读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;

}

}
  1. 从String的ArraList中,创建一个MovieList的ArrayList并填充它。
  2.  
        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);
                     }
                }