红音列表实现引发的思考
Jihongchang(讨论 | 贡献)2022年11月10日 (四) 14:47的版本
需求是:
要为当前登录用户显示一个列表,这个列表里是过去72小时内所有登录过的用户;
这些用户要按一定的规则排序,规则是:
比如当前登录用户是女性,那么男性用户要排在女性用户前面(1、0);
同样是男性用户,有房的要排在没房的前面(1、0);
同样有房的,有车的要排在没车的前面(1、0);
受教育程度(博士、硕士、学士、高中)……(4、3、2、1);
婚姻状况(未婚、离异、丧偶)(3、2、1)
工作(央企、国企、公务员、……)(4、3、2、1)
年龄(28~35、35~40、23~28、……)(4、3、2、1);
身材((kg~kg)苗条、(kg~kg)匀称、(kg~kg)偏瘦、(kg~kg)偏胖、……)(4、3、2、1)
要求实现一套权重机制
简单的实现是:
public class RankRecord {
/**
* 性别
*/
private int gender;
/**
* 是否有房
*/
private int house;
/**
* 是否有车
*/
private int car;
/**
* 身高
*/
private int height;
/**
* 体重
*/
private int weight;
/**
* 权重
*/
private int weights;
public RankRecord(int gender, int house, int car, int height, int weight) {
this.gender = gender;
this.house = house;
this.car = car;
this.height = height;
this.weight = weight;
initWeights();
}
/**
* 初始化权重
*/
private void initWeights() {
int weights = gender;
weights = (weights << 1) + house;
weights = (weights << 1) + car;
weights = (weights << 1) + height;
weights = (weights << 1) + weights;
this.weights = weights;
}
}