前言背景描述:

开发使用本来是直接使用数据库的依据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;

得到的结果:

java8中的Stream流式操作总结,List转Map或List转LinkedHashMap使用Collectors.groupingBy用法_GROUP_CONCAT超长

最后的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的方案替换