【问题标题】:Java map Set to another Set (Using Model Mapper or Any other way)Java map Set 到另一个 Set(使用 Model Mapper 或任何其他方式)
【发布时间】:2020-09-11 07:24:04
【问题描述】:

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

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

此项目在用户类中用作 Set

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.hibernate.collection.internal.PersistentSet 转换为 java.util.Set

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

【问题讨论】:

  • 首先您必须从 user.getProject() 设置 ProjectDTO 对象,例如新的 ProjectDTO(project.get...);添加它 setOfProjectDto,然后添加到 userDto.setProjectDto(setOfProjectDto)。如果您需要完整代码,请告诉我。
  • “setProjectDto”方法中的逻辑是什么?
  • @SanuraHettiarachchi 没有任何逻辑。只是设置对象。
  • 类型 setType = new TypeToken>(){}.getType();你可以尝试使用集合而不是 HashSet 吗?
  • @HiteshKumar 好的。和邱舟给出的答案一样吧?有效!非常感谢!!

标签: java set hashset modelmapper


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 2015-08-18
    • 2020-07-17
    • 2021-04-26
    • 1970-01-01
    相关资源
    最近更新 更多