前言背景描述:
开发使用本来是直接使用数据库的依据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()));
代码效果:
@Override
public 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的方案替换