简体   繁体   English

用于映射<Int,List <String >>的Java 8 Lambda列表

[英]Java 8 Lambda List to Map<Int, List<String>>

I have a list of dto with following element. 我有一个带有以下元素的dto列表。 userSeqId have duplicate values, userSeqId具有重复值,

private int userSeqId;
private String firstName;
private String lastName;
private String acctAgencyNumber;

I am trying to use Java 8 Lambda to group by 'userSeqId' to a Map. 我正在尝试使用Java 8 Lambda将'userSeqId'分组到Map。

I want Map<Integer, List<String>> where Key should be userSeqId and Value is List of acctAgencyNumber . 我想要Map<Integer, List<String>> ,其中Key应为userSeqId ,Value为acctAgencyNumber List。

When I use 我用的时候

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

I get Map<Integer, List<UserBasicInfoDto>> where key is userSeqId but value is list of whole object. 我得到Map<Integer, List<UserBasicInfoDto>> ,其中key是userSeqId但value是整个对象的列表。

There is a dedicated version of groupingBy() for your use case: 您的用例有一个专用版本的groupingBy()

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

The key point of this is to use the helper mapping collector, using which you can override the default groupingBy behaviour. 关键是使用帮助程序mapping收集器,您可以使用它来覆盖默认的groupingBy行为。

你可以试试这个:

customerSuperUserList.stream().collect(Collectors.groupingBy(UserBasicInfoDto::getUserSeqId,Collectors.mapping(UserBasicInfoDto::getAcctAgencyNumber, Collectors.toList())));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM