Java 将集合映射到另一个集合(使用模型映射器或任何其他方式)

Java map Set to another Set (Using Model Mapper or Any other way)

在我目前正在做的项目中,有一个项目class,

public class project {
  private Integer projectId;
  private String projectName;
  //getters & Setters
}

此项目在用户 class

中用作 集合
public class User {
  private Integer userId;
  private Set<Project> projects;
  //getters & Setters
}

我需要将此用户 class 映射到 UserDto。 UserDto 如下所示。

public class UserDto {
  private Integer userId;
  private Set<ProjectDto> projectDtos;
  //getters & Setters
}

ProjectDto 也与项目相同 class。

public class projectDto {
  private Integer projectId;
  private String projectName;
  //getters & Setters
}

为了映射 User 和 UseDto,我尝试了以下代码。但是它给出了一个错误。

private UserDto map(User user) {
  UserDto userDto = new UserDto();
  userDto.setUserId(user.getUserId());
  Set<ProjectDto> projectDto= new HashSet<>();
  Type setType = new TypeToken<HashSet<ProjectDto>>(){}.getType();
  projectDto = modelMapper.map(user.getProjects(), setType);
  userDto.setProjectDto(projectDto);
  return userDto;
}

返回以下错误:

failed to convert org.hibernate.collection.internal.PersistentSet to java.util.Set

如果你能为此支持我,那就太好了。也欢迎不使用 ModelMapper 的答案。 提前致谢!

先给ProjectDto添加一个构造函数class:

public class ProjectDto {

  private Integer projectId;
  private String projectName;

   public ProjectDto(Integer projectId, String projectName) {
      this.projectId = projectId;
      this.projectName = projectName;
   }
   //getters & Setters
}

然后用java 8流API,可以这样做:

private UserDto map(User user) {
    UserDto userDto = new UserDto();
    userDto.setUserId(user.getUserId());
    userDto.setProjects(user.getProjects().stream()
            .map(project -> new ProjectDto(project.getProjectId(), project.getProjectName()))
            .collect(Collectors.toSet()));
    return userDto;
}