Java 8中使用λ表达式实现将实体映射到DTO中

  

Java 8中使用λ表达式实现将实体映射到DTO中?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

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

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

让我们创建目标DTO:

公共类ActiveUserListDTO {
  公共ActiveUserListDTO () {
  }
  
  公共ActiveUserListDTO (UserEntity UserEntity) {
  这一点。用户名=userEntity.getUsername ();
  …
  }
  }

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

userRepository.findAll ();   问题:   Find.All()方法的签名(和许多其他人)返回java.lang.Iterable   java.lang.IterablefindAll (java.lang.Iterableiterable)

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

那么,如何获取流对象以获得Java8λ的权力?

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

Stream.spliterator userEntityStream=StreamSupport.stream (userRepository.findAll()(),假),

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

剩下的就是地图和收集:

ListactiveUserListDTOs=

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

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

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

List.spliterator activeUserListDTOs=StreamSupport.stream (userRepository.findAll()(),假). Map (ActiveUserList::新).collect (Collectors.toList ());

那很整齐! !

<强> java8中使用λ表达式将列表中实体类的两个字段转地图

代码:

List,列表=new ArrayList<的在();

Map<整数,String>地图=list.stream () .collect(收藏家。toMap(实体:getId、实体::方法));

常用的λ表达式:

* *   *列表→地图   *需要注意的是:   * toMap如果集合对象有重复的关键,会报错重复键....   * apple1 apple12的id都为1。   *可以用(k1, k2)→k1来设置,如果有重复的键,则保留key1,舍弃key2   */Apple> Map<整数;appleMap=appleList.stream () .collect(收藏家。toMap(苹果:getId→,(k1, k2)→k1));      安照某一字段去重=list.stream列表()。过滤器(distinctByKey (p→((ModCreditColumn) p) .getFieldCode ())) .collect (Collectors.toList ());      ListunitNetValue=https://www.yisu.com/zixun/listIncreaseDto.stream () . map (IncreaseDto:: getUnitNetValue) .collect (Collectors.toList ());//求和对象列表   BigDecimal allFullMarketPrice=entityList.stream ()。过滤器(价值-> value.getFullMarketPrice () !=null) . map (SceneAnalysisRespVo:: getFullMarketPrice) .reduce (BigDecimal。零,BigDecimal:添加);       naturalDayList列表;   总=naturalDayList.stream BigDecimal () .reduce (BigDecimal。零,BigDecimal:添加);      分组函数   Map groupMap=total.getGroupList () .stream () .collect (Collectors.groupingBy (SceneAnalysisRespVo:: getVmName));//DV01之和   BigDecimal allDV01=values.stream ()。过滤器(sceneAnalysisRespVo -> sceneAnalysisRespVo.getDv () !=null) . map (sceneAnalysisRespVo:: getDv) .reduce (BigDecimal。零,BigDecimal:添加);

看完上述内容,你们掌握Java 8中使用λ表达式实现将实体映射到DTO中的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

Java 8中使用λ表达式实现将实体映射到DTO中