Вы не можете заполнить список из параллельного потока, используя forEach
, потому что это приведет к неожиданным результатам, и размер получаемого списка может каждый раз отличаться.Вместо этого используйте синхронизированный список или заполните список, используя метод сбора.
List<Double> response = Collections.synchronizedList(new ArrayList<>());
По моему мнению, отображение внутри потока не выглядит сложным, и, возможно, нет смысла использовать параллельный поток, сравните производительность последовательного и параллельного потока самостоятельно.
В качестве второго варианта вы можете использовать коллекцию 2 раза, и она должна быть более эффективной, чем использование синхронизированного списка.
Function<PerformanceDataRequest, String> mapper = s -> {
try {
return performanceService.retrievePeriodData(s).toString();
} catch (ApiException e) {}
};
List<String> response = accountNumberList.parallelStream().map(mapper.apply(reqCAD)).collect(Collectors.toList());
response.addAll(accountNumberList.parallelStream().map(mapper.apply(reqUSD)).collect(Collectors.toList()));
Я не знаю, что такое reqCAD
/reqUSD
поэтому я поставил E
вместо.