我开始使用 java 8 流 API。我想将“sql 结果集”列表转换为域对象,即复合结构。
域对象:一个用户拥有一个权限集合,每个权限都有一个应用年份的集合。例如,John 有 2 个权限(MODERATOR 和 DEV)。其版主权限仅适用于 2014 年和 2015 年,其开发权限仅适用于 2014 年。
class User {
// some primitives attributes
List<Permission> permission;
}
class Permission {
// some primitives attributes
List<Integer> years;
}
现在我进行查询并得到一个平面结果列表,例如:
[1, "moderator", 2014]
[1, "moderator", 2015]
[1, "dev", 2014]
[2, "dev", 2010]
[2, "dev", 2011]
[2, "dev", 2012]
1 和 2 是用户 ID。
我尝试了各种构造,但最后它比流利的更复杂。并且没有工作:)
我在一本 Java 8 的书中读到,用收集器构建 dompain 对象是“简单的”。
读到这里我有点哭了:'(
我试过
sb.collect(
collectingAndThen(
groupingBy(
Mybean::getUserId,
collectingAndThen(
groupingBy(Monbean::getPermissionId, mapping(convertPermission, toList())),
finisherFonction)
),
convertUser)
);
并得到了一个泛型编译失败的地狱。
- 使用 java 8 流构造多级复合域对象的最佳方法是什么?
- collectionAndThen / Finisher 是个好主意吗?
- 还是您只使用 groupingBy 后跟映射函数?
- 您是否将分类器转换为对象(某种第一级映射函数?)
因为最后我想摆脱 Map 并得到一个List<User>
结果(我想我可以在 entrySet 上添加一个 map 调用来完成转换)。