实习周记(九):对象转换

对象转换

开发过程中,涉及到较多的对象转换问题,如分页,或者联表查询等,此处仅以开发中遇到例子进行举例,谨慎参考

Mapstruct

项目选用mapstruct进行对象转换

操作步骤

  1. 引入依赖
  <!--mapStruct依赖-->
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-jdk8</artifactId>
        <version>1.2.0.CR1</version>

    </dependency>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>1.2.0.CR1</version>   
        <scope>provided</scope>
    </dependency>
  1. 使用注解@Mapper完成各对象的转换
@Mapper(componentModel = "spring")
public interface WorkConvert {
    WorkDO toWorkDO(WorkDTO workDTO);
}
  1. 实际使用
@Service
public class WorkMemberRepositoryImpl{
    @Resource
    private WorkConvert workConvert;
    
    @Override
    public WorkDo test(WorkDTO dto) {
        return workConvert.toWorkDO(dto);
    }
} 
  1. 定制化映射
@Mapper
public interface PersonConverter {
    PersonConverter PERSON_CONVERTER = Mappers.getMapper(PersonConverter.class);
    @Mappings({
            @Mapping(source = "birthday", target = "birth"),
            @Mapping(source = "birthday", target = "birthDateFormat", dateFormat = "yyyy-MM-dd HH:mm:ss"),
            @Mapping(target = "birthExpressionFormat", ignore = true),
            @Mapping(source = "user.age", target = "age"),
            @Mapping(target = "email", ignore = true)
    })
    PersonDTO domain(Person person);
}

stream流

通过流的方式,对数据进行查找、过滤和映射等操作

  1. 映射
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WorkDTO {
    
    /** 
     * 姓名 
     */
    String name;
    
    /** 
     * 年龄
     */
    Integer age;
}



@Data
public class WorkVO {

    /**
     *  姓名
     */
    String name;

    /**
     *  年龄
     */
    Integer age;

    /**
     *  工号
     */
    Integer number;
}


public class StreamTest {
    @Test
    public void testStream() {
        WorkDTO workDTO = new WorkDTO("chenchenchen", 22);
        List<WorkDTO> workDTOS = new ArrayList<>();
        workDTOS.add(workDTO);
        List<WorkVO> workVOS = workDTOS.stream().map(r -> {
            WorkVO workVO = new WorkVO();
            workVO.setName(r.getName());
            workVO.setAge(r.getAge());
            workVO.setNumber(9999);
            return workVO;
        }).collect(Collectors.toList());
        System.out.println(workVOS);
    }
}

  1. 去重
workMemberList = workMemberList.stream().filter(r -> r.getName() != null).distinct.collect(Collectors.toList());

通过distinct完成去重功能,会将重复的元素置空

  1. 过滤
workMemberList = workMemberList.stream().filter(r -> r.getName() != null).collect(Collectors.toList());

项目中存在列表去重问题,如果不将去重后置空的元素过滤,将会报空指针异常

posted @ 2021-11-17 18:05  2月2日  阅读(64)  评论(0)    收藏  举报