如何防止方法在java中重写

时间:2017-01-10 11:36:44

标签: java excel

我有这个代码。这是搜索excel csv并创建.txt文件,缺少电影字幕。一部电影可以有一个或两个,三个或四个字幕。在excel中,每种语言都写成Y或N.它适用于一种语言(INDO)。我在excel和这里添加了其他语言(GBR,SIM,MYS)。

  int INDOSUB = 4;
  int GBRSUB = 5;
  int SIMSUB = 6;
  int MYSSUB = 7;
  int KPPNAME = 1;  
  ...  
  //NEW REQUIREMENT, CHECK PLAYLIST FOR MISSING SUBTITLES
  for(int i=0; i < assets.size(); i++)
  {
      try 
      {

          file = new File(assets.get(i));
          fileReader = new FileReader(file);
          bufferedReader = new BufferedReader(fileReader);
          while((line = bufferedReader.readLine()) != null)
          {

              tmp = line.split(",");
              if(tmp.length > 4)
              {
                 String indosubStatus = tmp[INDOSUB];
                 String gbrsubStatus = tmp[GBRSUB];
                 String simsubStatus = tmp[SIMSUB];
                 String myssubStatus = tmp[MYSSUB];

                 String kppKey = tmp[KPPNAME];

                 if(indosubStatus.equals("N"))
                 {
                    kppSubitleMap.put(kppKey,"NO INDO SUBTITLES");
                    kppWithMissingSub.put(tmp[KPPNAME],"");
                 }

                 if(gbrsubStatus.equals("N"))
                 {
                    kppSubitleMap.put(kppKey,"NO GBR SUBTITLES");
                    kppWithMissingSub.put(tmp[KPPNAME],"");
                 }

                 if(simsubStatus.equals("N"))
                 {
                    kppSubitleMap.put(kppKey,"NO SIM SUBTITLES");
                    kppWithMissingSub.put(tmp[KPPNAME],"");
                 }

                 if(myssubStatus.equals("N"))
                 {
                    kppSubitleMap.put(kppKey,"NO MYS SUBTITLES");
                    kppWithMissingSub.put(tmp[KPPNAME],"");
                 }                                     

              }

           }

      }
      catch(IOException ex)
      {
          System.out.println(ex.toString());
      }             
  }

运行时只显示此信息。我相信KPP_Heartless也没有GBR和SIM字幕。但它只显示了最后一个。所以它似乎压倒了以前的记录。

KPP_HEARTLESS_19 - NO MYS SUBTITLES 

DATE/TIME: 1/11/2017 - 23:45:09:20
DATE/TIME: 1/12/2017 - 04:45:07:21
DATE/TIME: 1/12/2017 - 12:30:08:20
DATE/TIME: 1/12/2017 - 17:30:04:19


KPP_LISTEN_07 - NO INDO SUBTITLES 

DATE/TIME: 1/12/2017 - 03:30:11:24
DATE/TIME: 1/12/2017 - 07:30:13:13
DATE/TIME: 1/12/2017 - 15:00:10:10


KPP_LISTEN_08 - NO INDO SUBTITLES 

DATE/TIME: 1/12/2017 - 20:00:10:05


KPP_HEARTLESS_20 - NO MYS SUBTITLES 

DATE/TIME: 1/12/2017 - 23:45:09:19

有人知道如何防止它超越吗?非常感谢你。

2 个答案:

答案 0 :(得分:3)

与覆盖方法无关。

问题来自于你写的时候:

kppSubitleMap.put(kppKey,"NO SIM SUBTITLES");
kppWithMissingSub.put(tmp[KPPNAME],"");

您将覆盖与该键相关联的值。

1)如果要在地图中包含多个值,可以使用List或Set作为值。例如:Map<String, List<String>>

以下是您应该使用kppSubitleMap地图执行的示例,但问题与kppWithMissingSub相同。

if(gbrsubStatus.equals("N")){
      List<String> values = kppSubitleMap.get(kppKey);
      if (values = null){
          values = new ArrayList<String>();
      }
      values.add("NO GBR SUBTITLES");
      kppSubitleMap.put(kppKey, values);
     ...
  }

锅炉板代码应以实用方法执行,以避免在每个if块中重复:

public List<String> getOrCreateList(Map<String,List<String>> map, String key){
      List<String> values = map.get(kppKey);
      if (values = null){
          values = new ArrayList<String>();
      }
    return values;
}

2)如果你想简单地连接信息,你可以这样做:

String value = kppSubitleMap.get(kppKey);
if (value==null){
  value = "";
}
value += "NO GBR SUBTITLES");
kppSubitleMap.put(kppKey, value );

答案 1 :(得分:0)

当您多次调用Map.put()时,Map只包含同一个键​​的最后一个值。你可以使用Map<String, Set<String>> 例如:

Set<String> values = kppSubitleMap.get(kppKey);
if (values == null) {
   values = new HashSet<>();
   kppSubitleMap.put(kppKey, values);
}
values.add("NO GBR SUBTITLES")

或使用Guava.Multimaps