Java 8 groupingBy:简单的单列分组

Java 8 groupingBy: Simple Grouping by a Single Column

我想使用 Java 8 groupingBy Collector 按单列进行简单分组,所以我这样做了:

Map<IUser, List<IUserPost>> postsPerUser =
                autorisationUsersRepository.findById(dateReference)
                .stream()
                .map(UsersMapper::map) -> Stream<IUser>
                .map(IUser::getPosts)  -> Stream<List<IUserPost>>
                .collect(groupingBy(IUserPost::getUser));

但是我有这个编译错误:

Required type:
Collector
<? super List<IUserPost>,
A,
R>
Provided:
Collector
<IUserPost,
capture of ?,
Map<IUser, List<IUserPost>>>
reason: no instance(s) of type variable(s) exist so that List<IUserPost> conforms to IUserPost

好吧,List<IUserPost> 而不是 IUserPost,所以你可以这样分组。

您可以使用 Collectors.toMap() 将键(用户)映射到自身,将值映射到他们的帖子列表:

postsPerUser =
    autorisationUsersRepository.findById(dateReference).stream()
    .map(UsersMapper::map) // Stream<IUser>
    .collect(toMap(user -> user, IUser::getPosts)) // Map<IUser, List<IUserPost>>

或者您可以使用 flatMap 得到一个 Stream<IUserPost>,然后您可以按用户分组。

postsPerUser =
    autorisationUsersRepository.findById(dateReference).stream()
    .map(UsersMapper::map) // Stream<IUser>
    .flatMap(IUser::getPosts) // Stream<IUserPost>    
    .collect(groupingBy(IUserPost::getUser)) // Map<IUser, List<IUserPost>>