@Service @Slf4jpublic class CsvScannerImpl implements CsvScanner { private static final Integer PID_COL = 0; private static final Integer SO_COL = 1; private static final Integer CATEGORY_COL = 2; private static final Integer MAX_COL_SIZE = 3; @SneakyThrows @Override public List parseCsv(InputStream inputCsv) { log.debug("parseCsv() method started"); List parsedResult = new LinkedList<>(); var bomInputStream = new BOMInputStream(inputCsv, false); var csvReader = new CSVReaderBuilder(new InputStreamReader(bomInputStream)).withCSVParser(new CSVParserBuilder().build()).build(); for (String[] csvLine : csvReader.readAll() ) { var csvEntryBuilder = IdentificationDataHolder.builder().pid(csvLine[PID_COL]).so(csvLine[SO_COL]); if (csvLine.length == MAX_COL_SIZE) { csvEntryBuilder = csvEntryBuilder.category(csvLine[CATEGORY_COL]); } parsedResult.add(csvEntryBuilder.build()); } log.debug("parseCsv() method finished with result: {}",parsedResult); return parsedResult; } }