2017-02-05 2 views
1

私はほぼ同じ2つのメソッドを持っています。私はこれらの2つのメソッドを1に組み合わせる方法があるかどうかを知りたいと思います。両方のタイプのマップをパラメータとして取ることができます。このメソッドは、Excelファイルに書き込みます。キーはExcelヘッダーです(すべてのキーが最初の行に表示されます)。マップされたリストは各キー(データ)の下のすべてです。どんなユニークなアイデアですか?Javaは同じ目的のためにメソッドの重複を防ぐ - 異なるパラメータ

private void test(Sheet sheet, HashMap<String, List<Double>> map) { 
     for (String var : map.keySet()) { 
      int rowNumb=0; 
      Row row = sheet.getRow(rowNumb); 
      Cell cell = row.createCell(currColumn); 
      cell.setCellValue(var); 
      rowNumb++; 
      List<Double> list = map.get(var); 
      for (int i = 0; i < list.size(); i++) { 
       row = sheet.getRow(rowNumb); 
       cell = row.createCell(currColumn); 
       cell.setCellValue(list.get(i)); 
      } 
      currColumn++; 
     } 
    } 



private void test(Sheet sheet, HashMap<String, List<String>> map) { <-- takes in String list rather thand Double. 
     for (String var : map.keySet()) { 
      int rowNumb=0; 
      Row row = sheet.getRow(rowNumb); 
      Cell cell = row.createCell(currColumn); 
      cell.setCellValue(var); 
      rowNumb++; 
      List<String> list = map.get(var);   <---- Only thing that is different 
      for (int i = 0; i < list.size(); i++) { 
       row = sheet.getRow(rowNumb); 
       cell = row.createCell(currColumn); 
       cell.setCellValue(list.get(i)); 
      } 
      currColumn++; 
     } 
    } 
+1

最初のアイデア:ジェネリックを使用してください。質問: 'currColumn'と' row'と 'cell'は何ですか?それらはどこに定義されていますか? – luk2302

+0

ああ、私は読みやすくするために、メソッドの前半でいくつかのものを取り出しました。 –

+0

おそらくうまくいかないかもしれませんが、このツールを試すことができます:https://pmd.github.io/pmd-5.5.2/usage/cpd-usage.html – Zack

答えて

4

あなたはジェネリック医薬品を使用する必要があります。

private <T> void test(Sheet sheet, HashMap<String, List<T>> map) { 
    for (String var : map.keySet()) { 
     List<T> list = map.get(var); 
     for (int i = 0; i < list.size(); i++) { 
      row = sheet.getRow(i); 
      cell = row.createCell(currColumn); 
      cell.setCellValue(list.get(i)); 
     } 
     currColumn++; 
    } 
} 

以前Tを入れて、今StringDoubleへの参照を置くWhereever。

+0

ありがとうございます。私がこれで持っている問題は最後の行です:cell.setCellValue(list.get(i)); setCellValue()は、型Tの場合に何をすべきかを知らない。とりわけ、String型またはdouble型を必要とする。これは重要なことを書くためのApachiパッケージPOIです。 –

+0

申し訳ありませんが、これは動作します:cell.setCellValue(list.get(i).toString()); 。ありがとう! –

関連する問題