Java这段代码如何优化?List 对象和foreach有点多

publicCollection<String>getTypes(@PathVariablelongid){List<UserGroup>userGroups=this.... public Collection<String> getTypes(@PathVariable long id) {
List<UserGroup> userGroups = this.userGroupRepository.findAllByUserId(id);
if (userGroups==null){
return null;
}
List<Long> gids = userGroups.stream().map(UserGroup::getGroupId).collect(Collectors.toList());
List<GroupRole> groupRoles = this.groupRoleRepository.findAllByGroupIdIn(gids);
if (groupRoles==null){
return null;
}
List<Long> rids = groupRoles.stream().map(GroupRole::getRoleId).collect(Collectors.toList());
List<Role> roles = this.roleRepository.findAllByIdIn(rids);
List<Long> resIds = new ArrayList<>();
for (Role role : roles) {
Collection<Privilege> ps = role.getPrivileges().values();
for (Privilege p:ps) {
if(PrivilegeType.VALUE.equals(p.getResId())) {
resIds.add(p.getResId());
}
}
}
List<ResValue> resValues = this.resValueRepository.findAllByIdIn(resIds);
Set<String> values = new HashSet<>();
for (ResValue resValue: resValues ) {
values.add(resValue.getValue());
}
return values;
}
展开
 我来答
为人爱兮1990
2018-11-28 · TA获得超过219个赞
知道小有建树答主
回答量:376
采纳率:100%
帮助的人:92.9万
展开全部
1、把这些提炼到一个方法里面来完成
2、一句sql语句能搞定的就用一句sql语句。你写的查询多个表java代码肯定没有mysql的速度快
3、方法模块化,把功能尽量小化,然后根据模块划分和封装
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式