Java将Set映射到另一个Set(使用Model Mapper或任何其他方式)



在我目前正在进行的项目中,有一个project类

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

该项目在用户类中用作集合

public class User {
private Integer userId;
private Set<Project> projects;
//getters & Setters
}

我需要将这个User类映射到UserDto。UserDto如下所示。

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

ProjectDto也与Project类相同。

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;
}

返回以下错误:

无法将org.hubinate.collection.internal.PersistentSet转换为java.util.Set

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

首先向ProjectDto类添加构造函数:

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

然后使用java8流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;
}