JAVA jdk1.8 Lambda 获取集合中元素的某个属性 指定 分隔符 拼接字符串
依赖JDK1.8 Lambda
我们在开发过程中经常遇到 一对多的关系,而有时候展示时需要将多的一端的某个属性拼接为一个字符串进行处理。以前的处理方式就是for循环 判断 首位 或 末尾 拼接分隔符,感觉代码不够简练。
使用Lambda表达式
List<TopicBasicVo> topicBasicVos = iMetadataTopicRefService.getTopicsByCollectId(id);
List<String> topicPaths = topicBasicVos.stream().map(TopicBasicVo::getPath).collect(Collectors.toList());
String topicPathsStr = String.join(";", topicPaths);
metadataSimpleVo.setTopicPath(topicPathsStr);
metadataSimpleVo.setTopicBasicVos(topicBasicVos);
效果:

当然返回类型为 List<Map<String,Object>>也能处理
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
List<String> paths = maps.stream().map(item -> item.get("path").toString()).collect(Collectors.toList());
String topicPathsStr = String.join(";", paths);
上边的处理方式当指定的属性为null时会空指针,处理一下
在容器遍历之前加入过滤 .filter(topic-> topic.getPath()!=null)
List<TopicBasicVo> topicBasicVos = iMetadataTopicRefInfoService.getTopicInfoByMetaCollectId(id);
List<String> topicPaths = topicBasicVos.stream().filter(topic-> topic.getPath()!=null).map(TopicBasicVo::getPath).collect(Collectors.toList());
String topicPathsStr = String.join(";", topicPaths);
metadataBasicSimpleVo.setTopicPath(topicPathsStr);
metadataCollectInfoVo.setTopicBasicVos(topicBasicVos);
//List<Map<String,Object>> 返回类型 依样处理
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
List<String> paths = maps.stream().filter(item -> item.get("path")!=null).map(item -> item.get("path").toString()).collect(Collectors.toList());
String topicPathsStr = String.join(";", paths);
本文介绍了如何利用JDK1.8的Lambda表达式和Stream API,简洁地处理一对多关系中,将多端对象的指定属性拼接成字符串。在处理过程中,还特别提到当属性为null时的空指针问题及其解决方案,通过在过滤操作中排除属性为null的元素。
598

被折叠的 条评论
为什么被折叠?



