Как объявления строки соответствуют только один раз в цикле в Apache POI HSSF

У меня есть электронная таблица со связующими строками, похожая на эту

SomeText1 SomeText2 SomeText3
Tommy     Tommy      John
Gilaen    Tamara     Shaz
Tamara     Phil      Tamara

Я хочу отфильтровать строки, содержащие "Тамару", поэтому строки, которые я должен получить, будут

SomeText1 SomeText2 SomeText3
Gilaen    Tamara     Shaz
Tamara     Phil      Tamara

Чтобы попытаться сделать это, я использую следующий код

  Map<String,String> mapEndoscBarr= new LinkedHashMap<String,String>();
            FileInputStream fis = new FileInputStream(new File(filepath));
            HSSFWorkbook      workBook = new HSSFWorkbook (fis);
            HSSFSheet         sheet    = workBook.getSheetAt (0);

            List<HSSFRow> filteredRows = new ArrayList<HSSFRow>();

            //Filter by pathology from what I am given
            Iterator<Row> rows= sheet.rowIterator(); 
            while (rows.hasNext ()){
            HSSFRow row = (HSSFRow) rows.next ();  
            Iterator<Cell> cells = row.cellIterator (); 
             while (cells.hasNext ()){
                 HSSFCell cell = (HSSFCell) cells.next (); 
                  if (cell.toString().contains("Tamara")) {
                      filteredRows.add(row);
                    }
             }
            }

Однако цикл добавляет строку каждый раз, когда найдено совпадение, поэтому я получаю дублированные строки следующим образом:

SomeText1 SomeText2 SomeText3
Gilaen    Tamara     Shaz
Tamara     Phil      Tamara
Tamara     Phil      Tamara

Как я могу вызвать только одно совпадение, чтобы я не получил этот дубликат, и он совпадет, если Тамара присутствует где-то в ряду.

1 ответ

Решение

Просто выйдите из итерации ячейки, как только совпадение будет найдено в любой из ячеек:

Map<String,String> mapEndoscBarr= new LinkedHashMap<String,String>();
            FileInputStream fis = new FileInputStream(new File(filepath));
            HSSFWorkbook      workBook = new HSSFWorkbook (fis);
            HSSFSheet         sheet    = workBook.getSheetAt (0);

            List<HSSFRow> filteredRows = new ArrayList<HSSFRow>();

            //Filter by pathology from what I am given
            Iterator<Row> rows= sheet.rowIterator(); 
            while (rows.hasNext ()){
            HSSFRow row = (HSSFRow) rows.next ();  
            Iterator<Cell> cells = row.cellIterator (); 
             while (cells.hasNext ()){
                 HSSFCell cell = (HSSFCell) cells.next (); 
                  if (cell.toString().contains("Tamara")) {
                      filteredRows.add(row);
                      break;
                    }
             }
            }
Другие вопросы по тегам