Я не буду предлагать путь к нему в цикле, потому что это уже сделано, но я бы предложил Streams
решение в уникальной строке:
Map<String, Double> alldataMap = new HashMap<>();
try {
alldataMap =
Files.lines(Paths.get("", filepath))
.map(str -> str.split(cvsSplitBy))
.filter(splitte -> !splitte[0].equals("Voertuig"))
.collect(Collectors.toMap(sp -> sp[0],
sp -> Double.parseDouble(sp[8].replaceAll(",", ".")),
(i1, i2) -> i1 + i2));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(alldataMap); // {Apples=4212.0, Bananas=985.23}
Шаги одинаковы:
- Итерация по строкам
- разделение на
cvsSplitBy
- удаление строк, начинающееся с
Voertuig
(! использовать .equals()
, а не !=
) - построить карту, следуя 3 правилам:
- ключ первый
String
- значениесекунда
String
анализируется как Double
- , если требуется объединение: сумма
Изменить, поскольку никто не предлагает использовать .getOrDefault()
Я даю это
while ((line = br.readLine()) != null) {
String[] splitter = line.split(cvsSplitBy);
if (!splitter[0].equals("Voertuig")) {
alldataMap.put(splitter[0],
alldataMap.getOrDefault(splitter[0], 0.0) +
Double.parseDouble(splitter[8].replaceAll(",", ".")));
}
}
Если ключ tke уже существует, он суммируется, если ключ не существует, он суммирует значение с 0