如何解决Java 8分组依据:按单列进行简单分组
我想使用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>>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。