前言背景描述:
开发使用本来是直接使用数据库的依据SQL进行group By获取到数据表的分组的一个字段的字符串,可是后来字符串越来越多越长,导致的最后的后面长度超多1024个汉字就会被截取,所以需要重新的重构方案进行字符串处理。
原始方案:
SELECT GROUP_CONCAT(t.factor_contant) as 'factor_contants' , t.factor_value as 'factor_value' from tbm_factor_config t where t.factor_type=5 GROUP BY t.factor_value;
得到的结果:
最后的factor_contants 字段超长了,导致后续的字符创获取不到,会导致配置失效!
修改方案为List获取数据表数据,order by 之后进行List使用流式Stream转成LinkedHashMap,然后返回配置就可以的。
JDK8使用Stream的把List使用流式Stream转成LinkedHashMap
Map<Integer, List<TbmFactorConfig>> tbmFactorConfigMap = tbmFactorConfigList.stream().collect(Collectors.groupingBy(TbmFactorConfig::getFactorValue, LinkedHashMap::new, Collectors.toList()));
代码效果:
@Overridepublic List<TbmFactorConfig> getFactorConfigByGourp(Integer fileType) {List<TbmFactorConfig> tbmFactorConfigList = tbmFactorConfigMapper.getFactorListByGroup(fileType);if (CollectionUtils.isEmpty(tbmFactorConfigList)) {return null;}Map<Integer, List<TbmFactorConfig>> tbmFactorConfigMap = tbmFactorConfigList.stream().collect(Collectors.groupingBy(TbmFactorConfig::getFactorValue, LinkedHashMap::new, Collectors.toList()));List<TbmFactorConfig> resultTbmFactorConfig = new ArrayList<TbmFactorConfig>();tbmFactorConfigMap.keySet().forEach(item -> {TbmFactorConfig tbmFactorConfig = new TbmFactorConfig();tbmFactorConfig.setFactorValue(item);String factorValues = tbmFactorConfigMap.get(item).stream().map(factorConfig -> factorConfig.getFactorContant()).collect(Collectors.joining(","));tbmFactorConfig.setFactorContant(factorValues);tbmFactorConfig.setFactorWeight(tbmFactorConfigList.get(0).getFactorWeight());resultTbmFactorConfig.add(tbmFactorConfig);log.error("目前获取到的map的key: {},获取到的value是:{} ", item, factorValues);});return resultTbmFactorConfig;}
打印出来的日志:
FactorConfigDaoImpl :目前获取到的map的key: 80,获取到的value是:FX168北美,TechWeb,北京日报,花网专稿,中国新闻网,中华工商时报
FactorConfigDaoImpl :目前获取到的map的key: 85,获取到的value是:中国基金报
FactorConfigDaoImpl :目前获取到的map的key: 87,获取到的value是:盖世汽车,盖世汽车快讯,中国汽车工业信息网
FactorConfigDaoImpl :目前获取到的map的key: 88,获取到的value是:机床商务网,中钢网,中国化工报,中国数字视听网,中国水网
FactorConfigDaoImpl :目前获取到的map的key: 90,获取到的value是:环球网,中国网科技,北京商报,中财网,中国机床工具工业协会
FactorConfigDaoImpl :目前获取到的map的key: 91,获取到的value是:中关村在线
FactorConfigDaoImpl :目前获取到的map的key: 92,获取到的value是:全国企业破产重整案件信息网
FactorConfigDaoImpl :目前获取到的map的key: 94,获取到的value是:格隆汇,深圳商报
完美的实现SQL的方案替换
如果觉得《java8中的Stream流式操作总结 List转Map或List转LinkedHashMap使用Collectors.groupingBy用法》对你有帮助,请点赞、收藏,并留下你的观点哦!