У меня есть 700 CSV-файлов (из 5 МБ, 1000 строк и 600 столбцов) -> вызвать его загруженный файл.У меня есть еще 2 файла CSV, FileA (20 МБ, 3 столбца и 100 000 строк) и FileB (30 МБ, 2 столбца и 100 000 строк).
А остальные 700 файлов CSV загружаются в List<String>
используя
Files.readAllLines(filePath, StandardCharsets.ISO_8859_1);
Постановка задачи:
Мне нужно проверить, существует ли для каждого загруженного файла его столбец A в столбце C FileA, если это правда, то проверить, соответствующиеСтолбец B FileA существует в столбце A FileB. Теперь, если это также верно только тогда, загрузите соответствующую строку Загруженного файла в массив байтов.
Существующий код:
public void createByteData(Path filePath, List<String> loadedFiles) {
LOGGER.info("LOADING THE SCENARIO FILE : " + filePath);
for (String loadedFile : loadedFiles) {
String[] loadedFileCoulmns= loadedFile .split(",");
String loadedFileFirstCoulmns = loadedFileCoulmns[0];
//LOGGER.info("LOADING THE ROW FOR SCENARIO FILE : " + filePath);
if(readFileA.containsKey(loadedFileFirstCoulmns )) { //readFileA is Stroing the FileA in private HashMap<String, String> , Column C in Key and Column B in Value
String getColumnB = constructNumtra(readFileA.get(loadedFileFirstCoulmns ));
if (readFileB.contains(getColumnB)) { // readFileB is Stroing the FileB in private HashMap<String, String> , Column B in Key and Column A in Value
//LOGGER.info("INSTRUMENT FOUND IN PORTFOLIO NUMTRA: " + getColumnB);
//To Do : Convert Scenario File to Byte Array
}
}
}
LOGGER.info("Loading Completed for : " + filePath);
}
Также яесть роскошь использовать любую коллекцию для загрузки файлов.Я использовал Array<List>
и Hashmap здесь.
Инфраструктура и технологическая информация:
- Springboot
- Многопоточность - загруженные файлы загружаются параллельно с использованием параллельных потоков Java 8,
- Java 8.
Код работает отлично.Но это занимает много времени, так как у меня большие файлы CSV.
Как я могу оптимизировать эту ситуацию?