You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将集合的参数化类型从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:31:41