如果我们有如下所示的senario,那么处理null的最佳方法是什么
//mocking for demonstraton
studentsByCourseRoster.setUsers(null);
studentsByCourseRoster.getUsers().stream().forEach(user -> {
final UserDTOv2 userDTO = new UserDTOv2();
userDTO.populateUserDataFromUserDTO(user, groupedUsers);
users.add(userDTO);
});
Run Code Online (Sandbox Code Playgroud) 进一步优化以下代码的最佳方法是什么
public List<GroupDTOv2> getAllGroups(String xTenantId, CourseType courseType, String courseId, ContextType contextType, String contextId) throws AuthenticationException {
final List<GroupV2> groups = groupV2Repository.findByTenantIdAndCourseTypeAndCourseIdAndContextTypeAndContextId(xTenantId, courseType, courseId, contextType, contextId);
final RosterDTOv2 roster = rosterServiceFacade.getRoster(xTenantId, courseType, courseId, contextType, contextId);
final ArrayList<GroupDTOv2> groupDtoList=new ArrayList<>();
groups.stream().forEach(group -> {
final GroupDTOv2 groupDTO=new GroupDTOv2();
BeanUtils.copyProperties(group,groupDTO);
roster.getUsers().forEach(userDTOv2 -> {
if(userDTOv2.getUserId().equalsIgnoreCase(group.getTeamLeadId())){
groupDTO.setTeamLead(userDTOv2);
}
if(group.getTeamMemberIds().contains(userDTOv2.getUserId())){
groupDTO.getTeamMembers().add(userDTOv2);
}
});
groupDtoList.add(groupDTO);
});
return groupDtoList;
}
Run Code Online (Sandbox Code Playgroud)
如果我们使用两次流来设置团队领导对象和团队成员我认为成本会很高,那么什么是最合适的方式
我们如何使用优化此流来收集集合的嵌套级别和根级别.
final Set<String> groupedUsers = new HashSet<>();
groups.stream().forEach(group -> {
groupedUsers.add(group.getTeamLeadId());
groupedUsers.addAll(group.getTeamMemberIds().stream().collect(Collectors.toSet()));
});
Run Code Online (Sandbox Code Playgroud) group.getTeamMemberIds().stream().filter(id -> userMap.containsKey(id)).
map(id -> groupDTO.getTeamMembers().add(userMap.get(id)));
Run Code Online (Sandbox Code Playgroud)
Sonar检测到这一点,因为中间流方法不应该被闲置主要bug