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>>
我想使用 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>>