如何将集合的参数化类型从UserEntity改为UserDTO?
问题描述
我想在UserServiceImpl的一个方法中返回以UserDTO为参数化类型的所有用户列表。当前我的方法是这样的:
@Override public List<UserEntity> getUsers() { var usersList = userRepository.findAll(); return usersList; }
我希望将其修改为public List<UserDTO> getUsers()。我已经有实体转DTO的映射方法:
public UserDTO mapToUserDTO(UserEntity userEntity) { var userDto = new UserDTO(); var rolesEntity = userEntity.getRoles().stream() .map(RoleEntity::getId) .map(String::valueOf) .collect(Collectors.toList()); userDto.setId(userEntity.getId()); userDto.setUsername(userEntity.getUsername()); userDto.setName(userEntity.getName()); userDto.setSurname(userEntity.getSurname()); userDto.setEmail(userEntity.getEmail()); userDto.setAge(userEntity.getAge()); userDto.setRoles(rolesEntity); return userDto; }
但我不知道该如何应用这个方法,请问如何将方法的参数化类型从UserEntity改为UserDTO?
解决方案
利用Java Stream的map操作,把仓库查询到的每个UserEntity通过mapToUserDTO方法转换为UserDTO,最后收集成目标列表即可。修改后的代码如下:
@Override public List<UserDTO> getUsers() { return userRepository.findAll() .stream() .map(this::mapToUserDTO) .collect(Collectors.toList()); }
关键步骤说明
stream():把查询返回的List<UserEntity>转为Stream流,支持链式操作。map(this::mapToUserDTO):对流中每个UserEntity执行转换方法,完成实体到DTO的映射,这里用方法引用简化代码,效果等价于userEntity -> this.mapToUserDTO(userEntity)。collect(Collectors.toList()):将转换后的UserDTO流收集为List<UserDTO>,作为方法返回值。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

