需求:增加人物政治倾向,需要给前端传人物每个派别的百分比,和人物是什么派别
要求:把这些放在一个接口的返回值里
分析过程:
先想出返回值应该是怎么样的,一个json串,如下:
{
"code": 200,
"success": true,
"data": {
"tendency": "亲近派",
"percentage": {
"随机派": 0.5,
"亲近派": 0.5,
"强硬派": 0.0
}
},
"msg": "操作成功"
}
1. 先返回值该怎么存放,一开始想过放在对象中,集合中,map中,还是放在一个vo中合适
2.一层一层的写,先写controller层,确定传参和返回值
写service层
写serviceimpl层,这里面写逻辑
①怎么查到条数,怎么算出百分比,怎么根据最大的百分比取到派别。
②计算百分比,保留两位小数,一开始使用的是:
public String txfloat(int a,int b) {
DecimalFormat df=new DecimalFormat("0.00");//设置保留位数
return df.format((float)a/b);
}
③这种方法最后得出来的结果是String类型,一开始是没有发现问题的,主要把存放百分比的map类型也改成String即可,但是由于之后需要排序,并且根据value取key就发现了问题,因为String是字符串,所以1.00这种还是会表示成1.00,但是转换成float类型后,1.00就变为1.0,根据value取key就取不出来,所以为了实现能根据value取key,直接让计算出来的百分比是float类型的保留两位小数,方法如下:
float f1 = (float) (Math.round((float)num1/sum * 100)) / 100;
数组里面的值和存入的百分比是同一个,能根据value取key。
④这个逻辑里面需要根据value取key,所以查到了双向map----BiMap
3.写完后没注意的问题:
情况没有想全,没有数据,两种或者三种派别相等怎么办,查询语句忘记加上从未删除的里面查。
依次解决了问题,添加了判断,相等的取第一种,修改查询语句。