Java 8中使用λ表达式实现将实体映射到DTO中?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
当我们需要将DTO转换为实体(Hibernate实体等)并向后转换时,我们都会面临混乱的开销代码。
在我的示例中,我将用Java 8演示代码如何变得越来越短。
让我们创建目标DTO:
公共类ActiveUserListDTO { 公共ActiveUserListDTO () { } 公共ActiveUserListDTO (UserEntity UserEntity) { 这一点。用户名=userEntity.getUsername (); … } }
使用弹簧数据JPA API检索所有实体的简单查找方法:
userRepository.findAll (); 问题: Find.All()方法的签名(和许多其他人)返回java.lang.Iterablejava.lang.Iterable findAll (java.lang.Iterable iterable)
我们不能使用. lang。Iterable(*在集合上运行的流来制作流。每个集合都是Iterable,但并不是每个Iterable都是必需的集合)。
那么,如何获取流对象以获得Java8λ的权力?
让我们使用StreamSupport对象将Iterable转换为流:
Stream
引用>.spliterator userEntityStream=StreamSupport.stream (userRepository.findAll()(),假), 大。现在,我们掌握了流,这是Java 8 Labmda的关键!
剩下的就是地图和收集:
List
activeUserListDTOs= 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中