gpt4 book ai didi

java - 如何使用parallelStream处理2个列表

转载 作者:行者123 更新时间:2023-12-02 10:39:43 25 4
gpt4 key购买 nike

我有 2 组基于 CAD 和 USD 货币的帐号。根据这些列表,我需要通过传递请求参数(一个用于 CAD,另一个用于美元)来调用相同的方法。

List<List<String>> accountNumberList = Arrays.asList(
accountNumbersCAD, accountNumbersUSD
);
List<String> response = new ArrayList<>();
accountNumberList.parallelStream().forEach(s -> {
String response1 = null;
String response2 = null;
try {
response1 = performanceService.retrievePeriodData(reqCAD).toString();
response2 = performanceService.retrievePeriodData(reqUSD).toString();
} catch (ApiException e) {

}

response.add(response1);
response.add(response2);
});

return (ResponseEntity<String>) response;

请指导我如何使用parallelStream

提前致谢!

最佳答案

您无法使用 forEach 从并行流填充列表,因为这会导致意外结果,并且每次生成的列表大小可能不同。而是使用同步列表或使用收集方法填充列表。

List<Double> response = Collections.synchronizedList(new ArrayList<>());

在我看来,流内部的映射看起来并不复杂,并且使用并行流可能没有意义,请自行比较顺序流和并行流的性能。

作为第二个选项,您可以使用收集两次,它应该比使用同步列表更有效。

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

关于java - 如何使用parallelStream处理2个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53015893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com