java 使用parallelStream 生成map

问题描述 投票:0回答:1

我有一个单线程代码如下:

private Map<Employee, EmployeeDeptMap> empToEmpDept(List<Employee> empList) {
    Map<Employee, EmployeeDeptMap> map = new HashMap<>();
    for (Employee emp : empList) {
        map.put(emp, empDepartmentResolver.resolve(emp));
    }
    return map;
}

这里的代码根据一些抽象定义的规则依次遍历员工列表并为每个员工映射部门。

这里的要求是我想并行运行它,以便多个部门的解决方案可以并行进行并节省时间。

列表相当大。

我尝试使用以下代码,但在应用并行性时陷入困境

empList.parallelStream()
       .map(emp-> empDepartmentResolver.resolve(emp))
       .collect(Collectors.toMap())

任何建议,并行解决这些问题的最佳方法是什么。

java stream fork-join
1个回答
0
投票

正如@Abra 提到的,您需要传递参数来定义如何创建地图。您可以尝试下面的代码:

Map<Employee, EmployeeDeptMap> map = empList
        .parallelStream()
        .collect(Collectors.toMap(Function.identity(), empDepartmentResolver::resolve));
© www.soinside.com 2019 - 2024. All rights reserved.