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);