2017-02-05 2 views
1

나는 거의 동일한 두 가지 방법이 있습니다. 이 두 가지 방법을 하나로 결합하는 방법이 있는지 알고 싶습니다. 두 가지 방법을 모두 매개 변수로 사용할 수 있습니다. 이 메서드는 Excel 파일에 씁니다. 키는 엑셀 헤더 (모든 키가 첫 번째 행에 있음)이며 매핑 된 목록은 각 키 (데이터) 아래의 모든 항목입니다. 어떤 독특한 아이디어입니까?자바는 같은 목적을위한 메서드 복제를 방지합니다 - 다른 매개 변수

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

당신은 제네릭을 사용한다 :

이전 StringDouble에 대한 참조를 넣어 Whereever
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을 넣어.

+0

감사합니다. 내가 가지고있는이 문제는 마지막 줄이다 : cell.setCellValue (list.get (i)); setCellValue()는 유형 T 인 경우 수행 할 작업을 알지 못합니다. 여러 가지 중에서 String 유형 또는 double 유형이 필요합니다. 그게 중요하다면 이것은 쓰기에 대한 Apachi 패키지 POI입니다. –

+0

좋아,이 작동합니다 : cell.setCellValue (list.get (i) .toString()); . 감사! –