Question: I have a list of dto with following element. `userSeqId` have duplicate values,

```
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.

I want `Map<Integer, List<String>>`
where Key should be `userSeqId` and Value is List of `acctAgencyNumber`.

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.

Answer: 
There is a [dedicated version of `groupingBy()`](https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#groupingBy-java.util.function.Function-java.util.stream.Collector-) for your use case:

```
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.
You can try this:

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

```