使用Java 8 Lambda表达式将实体映射到DTO的操作

 更新时间:2020年08月22日 12:03:17   作者:dnc8371  
这篇文章主要介绍了使用Java 8 Lambda表达式将实体映射到DTO的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

当我们需要将DTO转换为实体(Hibernate实体等)并向后转换时,我们都会面临混乱的开销代码。

在我的示例中,我将用Java 8演示代码如何变得越来越短。

让我们创建目标DTO:

public class ActiveUserListDTO { 
  public ActiveUserListDTO() {
  }
 
  public ActiveUserListDTO(UserEntity userEntity) { 
    this.username = userEntity.getUsername(); 
   ...
  }
}

使用Spring数据JPA API检索所有实体的简单查找方法:

userRepository.findAll();
Problem:
Find.All() method signature (like many others) returns java.lang.Iterable<T>
java.lang.Iterable<T> findAll(java.lang.Iterable<ID> iterable)

我们不能使用java.lang.Iterable(*在集合上运行的Streams来制作Stream。每个Collection都是Iterable,但并不是每个Iterable都是必需的Collection)。

那么,如何获取Stream对象以获得Java8 Lambda的Power?

让我们使用StreamSupport对象将Iterable转换为Stream:

Stream<UserEntity> userEntityStream = StreamSupport.stream(userRepository.findAll().spliterator(), false);

大。 现在,我们掌握了Stream,这是Java 8 Labmda的关键!

剩下的就是地图和收集:

List<ActiveUserList> activeUserListDTOs =

userEntities.stream().map(ActiveUserList::new).collect(Collectors.toList());

我正在使用Java 8 Method Reference,因此将每个实体初始化(和映射)到dto中。

因此,让我们对所有内容进行简短介绍:

List<ActiveUserList> activeUserListDTOs=StreamSupport.stream(userRepository.findAll().spliterator(), false).map(ActiveUserList::new).collect(Collectors.toList());

那很整齐!!

补充知识:java8中使用Lambda表达式将list中实体类的两个字段转Map

代码:

List<Entity> list = new ArrayList<>();

Map<Integer, String> map = list.stream().collect(Collectors.toMap(Entity::getId, Entity::getType));

常用的lambda表达式:

**
 * List -> Map
 * 需要注意的是:
 * toMap 如果集合对象有重复的key,会报错Duplicate key ....
 * apple1,apple12的id都为1。
 * 可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
 */
Map<Integer, Apple> appleMap = appleList.stream().collect(Collectors.toMap(Apple::getId, a -> a,(k1,k2)->k1));
 
安照某一字段去重
list = list.stream().filter(distinctByKey(p -> ((ModCreditColumn) p).getFieldCode())).collect(Collectors.toList());
 
List<Double> unitNetValue = listIncreaseDto.stream().map(IncreaseDto :: getUnitNetValue).collect(Collectors.toList());
 
//求和 对象List
BigDecimal allFullMarketPrice = entityList.stream().filter(value -> value.getFullMarketPrice()!= null).map(SceneAnalysisRespVo::getFullMarketPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
 
 List<BigDecimal> naturalDayList;
 BigDecimal total = naturalDayList.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
 
分组函数
Map<String, List<SceneAnalysisRespVo>> groupMap = total.getGroupList().stream().collect(Collectors.groupingBy(SceneAnalysisRespVo::getVmName));
 
//DV01之和
BigDecimal allDV01 = values.stream().filter(sceneAnalysisRespVo -> sceneAnalysisRespVo.getDv() != null).map(SceneAnalysisRespVo::getDv).reduce(BigDecimal.ZERO, BigDecimal::add);

以上这篇使用Java 8 Lambda表达式将实体映射到DTO的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring实例化bean过程解析及完整代码示例

    Spring实例化bean过程解析及完整代码示例

    这篇文章主要介绍了Spring实例化bean过程解析及完整代码示例,简单分析实例化bean过程并且分享了相关实例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Spring Boot 中整合 MyBatis-Plus详细步骤(最新推荐)

    Spring Boot 中整合 MyBatis-Plus详细步骤(最新推荐)

    本文详细介绍了如何在SpringBoot项目中整合MyBatis-Plus,包括整合步骤、基本CRUD操作、分页查询、批量操作、自定义SQL操作等,通过这些步骤,开发者可以快速实现数据库操作,提高开发效率,感兴趣的朋友一起看看吧
    2025-01-01
  • idea中git提交的代码如何回退到指定版本

    idea中git提交的代码如何回退到指定版本

    文章详细介绍了如何在本地和远程仓库中回退到指定的Git版本,通过步骤说明了如何使用Git命令和右键菜单选项来实现这一操作
    2024-11-11
  • springboot启动前执行方法的四种方式总结

    springboot启动前执行方法的四种方式总结

    这篇文章主要给大家介绍了关于springboot启动前执行方法的四种方式,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • 使用MyBatis-Generator如何自动生成映射文件

    使用MyBatis-Generator如何自动生成映射文件

    这篇文章主要介绍了使用MyBatis-Generator如何自动生成映射文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • SpringBoot MainApplication类文件的位置详解

    SpringBoot MainApplication类文件的位置详解

    这篇文章主要介绍了SpringBoot MainApplication类文件的位置详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • JAVA PDF操作之实现截取N页和多个PDF合并

    JAVA PDF操作之实现截取N页和多个PDF合并

    这篇文章主要为大家详细介绍了java关于PDF的一些操作,例如截取N页并生成新文件,转图片以及多个PDF合并,文中的示例代码讲解详细,感兴趣的可以了解下
    2025-01-01
  • SpringBoot获取resources目录下的文件

    SpringBoot获取resources目录下的文件

    在 Spring Boot 项目中,获取 resources 目录中的文件路径通常涉及到访问类路径资源,Spring Boot 提供了一些工具类和方法,下面小编就来和大家详细聊聊
    2024-10-10
  • SpringBoot配置绑定方法详解

    SpringBoot配置绑定方法详解

    配置绑定是SpringBoot其中一个底层功能,SpringBoot把配置绑定的过程变得更加简单,传统java将常用的配置放到配置文件properties中,之后将这些配置绑定到javabean中
    2022-10-10
  • Dubbo Consumer引用服务示例代码详解

    Dubbo Consumer引用服务示例代码详解

    dubbo中引用远程服务有两种方式:服务直连(不经过注册中心)、基于注册中心引用服务,在实际线上环境中我们基本上使用的都是基于注册中心引用服务的方式,下面我们就围绕该方式讲解分析
    2023-03-03

最新评论