Java 8-从具有嵌套列表的对象列表收集到地图中

时间:2019-05-31 09:21:02

标签: java collections java-8 nested java-stream

我有一个带有嵌套静态类的类,

public class User {
    private final Long userId;
    private final List<UserData> userData;

    {...}

    @Getter
    public static class UserData {
        private final Long customerId;
        private final String customerName;

    {...}
    }
}  

然后我有一个List<User> users。 我想将users映射到Map<User.userId, UserData.customerId>

所以地图看起来像这样:
1. userId1,customerId1
2. userId1,customerId2
3. userId1,customerId3
4. userId2,customerId4
5. userId2,customerId5
6. userId3,customerId6

有没有机会通过Java 8流来做到这一点?我尝试过对嵌套列表进行平面映射,但是在收集结果时遇到了问题。

1 个答案:

答案 0 :(得分:1)

假设您要使用Map<User.userId, List<UserData.customerId>>,可以使用以下方法:

 Map<Long, List<Long>> result = users.stream()
    .collect(Collectors.toMap(
        User::getUserId,
        u -> u.getUserData().stream()
            .map(UserData::getCustomerId)
            .collect(Collectors.toList())
    ));