Regístrelo, escriba una operación interesante encontrada en el proyecto;
Por ejemplo, después de consultar datos en el back-end java, el formato de los datos originales obtenidos de la base de datos es el siguiente: (puede almacenarse en forma de cadena en formato json cuando se almacena en la base de datos o en es )
Pero el formato de datos requerido por el front-end es el siguiente:
颜色:蓝色,黑色,金色,粉色
版本:6GB+128GB,4GB+64GB
Hay bastantes negocios en este escenario: por ejemplo, la visualización de especificaciones de productos básicos en los sitios web de compras más comunes: por ejemplo
Use directamente los datos sin procesar consultados y devuélvalos al front-end. Puede que no sea fácil para el front-end mostrar estos datos de especificación, por lo que debe convertirse en un mapa y luego devolverlo al front-end.
El código para convertir el formato de especificación es el siguiente:
Los puntos clave involucrados en él:
1. El método transversal del mapa: domina al menos uno o dos
2. Conversión entre datos de cadena en formato json y varios objetos, usando la biblioteca de herramientas
3. Cuando use keySet para recorrer el mapa, tenga cuidado de obtener el valor por adelantado. Esta operación puede dar forma a la tipología de datos del valor por adelantado. También maneja valores nulos.
/**
* 规格转化方法 开始我们给前端的数据格式 用手机举例
* specList 中的数据如下格式:
* [
* "{'颜色': '蓝色', '版本': '6GB+128GB'}",
* "{'颜色': '黑色', '版本': '6GB+128GB'}",
* "{'颜色': '黑色'}",
* "{'颜色': '蓝色'}",
* ]
* ======》 前端实际需要的数据格式:
* 颜色:【蓝色,黑色,金色,粉色】
* 版本:【6GB+128GB,4GB+64GB】
*
* 返回的参数怎么确定?方法应该接收什么类型的参数?
* 返回的数据格式上面已经写了,肯定是map的数据,但是map的泛型就有讲究了,我们要保证value里面的数据
* 没有重复,所以这里不使用list了,使用的是set;
* 接收的参数:我们打算对规格的参数列表进行转换,所以方法的参数肯定是规格参数列表
*/
public Map<String, Set<String>> formatSpec(List<String> specList){
Map<String, Set<String>> resultMap = new HashMap<>();
//遍历list
for (String specStr : specList) {
//specStr json格式的string串 ====> "{'颜色': '蓝色', '版本': '6GB+128GB'}"
Map<String, String> specMap = JSON.parseObject(specStr, Map.class); //颜色:蓝色 版本:6GB+128GB
//遍历map map的遍历必须要会那么至少一种
for (String key : specMap.keySet()) {
//key 颜色 value 蓝色 resultMap.get(key)这个操作着实没有看懂.....
// --> 通过查询资料发现这个是keySet遍历的要求:必须先去取一次key的值
//但是为什么不用 specMap.get(key) 来取第一次值嘞?当然可以,但是那个时候resultMap的value值就不好赋值了
//specMap.get(key)取到的value的值的类型是string,而我们需要的是Set<String>,第一次的getKey(得到的是value)可以帮我们完成keySet对value的数据类型转换
Set<String> valueSet = resultMap.get(key); //valueSet:【蓝色,黑色,金色,粉色】
if(valueSet == null){
valueSet = new HashSet<>();
}
valueSet.add(specMap.get(key));
resultMap.put(key,valueSet);
}
}
return resultMap;
}
Finalmente, pruébelo en el proyecto: el resultado de la pantalla es