如何通过列表向 Collectors.toMap() 添加键和值?

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

Map员工Meetups = new HashMap<>(employeesId.size()); for(字符串员工 ID : 员工 ID) { 列出聚会 = meetupRepository. getAllByEmployeeId(employeeId). 溪流()。 地图(meetupMapper::toDTO)。 收集(Collectors.toList()); employeeMeetups.put(employeeId,meetups); 返回员工聚会; 我想把上面的东西改成下面的东西。 return Collectors.toMap(//如何在这里添加键?, 员工 ID。 溪流()。 forEach(e->meetupRepository.getAllByEmployeeId(e). 溪流()。 地图(meetupMapper::toDTO)。 收集(Collectors.toList()) )); 我不知道如何使键与他们的列表匹配,这如何实现?

java java-stream core collectors
1个回答
0
投票

您可以使用

Collectors.toMap()
,这样:

Map<String, List<MeetupDTO>> employeesMeetups = employeesId.stream()
    .collect(Collectors.toMap(
        employeeId -> employeeId, // Key mapper
        employeeId -> meetupRepository.getAllByEmployeeId(employeeId).stream()
            .map(meetupMapper::toDTO)
            .filter(m -> m.getStartDate().compareTo(startDay) > 0 && m.getEndDate().compareTo(endDay) < 0)
            .collect(Collectors.toList()) // Value mapper
    ));

重要提示:在使用

toMap()
收集器时,需要确保键是唯一的,否则可能会遇到
IllegalStateException

© www.soinside.com 2019 - 2024. All rights reserved.