Java 8 Lambda 列表到 Map<Int, List<String>>

Bal*_*ala 5 java lambda

我有一个带有以下元素的 dto 列表。userSeqId有重复的值,

private int userSeqId;
private String firstName;
private String lastName;
private String acctAgencyNumber;
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 Java 8 Lambda 按“userSeqId”分组到地图。

我想要Map<Integer, List<String>> Key 应该在哪里userSeqId,Value 是acctAgencyNumber.

当我使用

Map<Integer, List<UserBasicInfoDto>> superUserAcctMap = customerSuperUserList.stream()
    .collect(Collectors.groupingBy(UserBasicInfoDto::getUserSeqId));
Run Code Online (Sandbox Code Playgroud)

我知道Map<Integer, List<UserBasicInfoDto>>键在哪里,userSeqId但值是整个对象的列表。

Grz*_*rek 5

有一个适用于您的用例的专用版本groupingBy()

Map<Integer, List<String>> result = customerSuperUserList.stream()
      .collect(Collectors.groupingBy(
        UserBasicInfoDto::getUserSeqId,
        Collectors.mapping(UserBasicInfoDto::getAcctAgencyNumber, toList())));
Run Code Online (Sandbox Code Playgroud)

关键是使用辅助mapping收集器,您可以使用它覆盖默认groupingBy行为。