背景
今天我的领导跟我提了一个小小的建议,我觉得很不错。我有这么一个界面,显示的是小车的电量信息,界面很简单,简单的由listView控件展示数据。界面的小车电量信息是根据实时包获取得到的,所以数据源中的电量值大小显然不是有序排列的。但是我这边也没做处理,只要求查看电量信息,我就简单的只做了数据的展示,没有根据小车id大小或者是小车电量值大小进行排序并展示。
领导的建议说:我觉得这个列表的数据你可以根据小车的电量值大小进行排序,从上到下电量值按从小到大进行排序。这样方便查找出更低电量的小车,我觉得很有道理,于是做出调整。下面看我的实现方法。
代码实现
List<CarBatteryInfoEntity> orderList = new ArrayList<>();// 创建集合保存对实体对象某一属性进行大小排序后数据集
/** * 根据电量值排序(由小到大) */
private void orderList() {
orderList = tempList;// 先将需要排序的实体对象集合赋值给orderList集合
int len = orderList.size();// 长度
for (int i = 0;i < len;i++){
for (int j = 0;j < len - (i + 1);j++){
// 将较大电量值的实体对象向后移动
if (orderList.get(j).getLaveBattery() > orderList.get(j+1).getLaveBattery()){
// 获取j、j+1位置处的两个实体对象
CarBatteryInfoEntity entityJ = new CarBatteryInfoEntity();
entityJ.setRobotID(orderList.get(j).getRobotID());
entityJ.setLaveBattery(orderList.get(j).getLaveBattery());
entityJ.setVoltage(orderList.get(j).getVoltage());
CarBatteryInfoEntity entityJ1 = new CarBatteryInfoEntity();
entityJ1.setRobotID(orderList.get(j+1).getRobotID());
entityJ1.setLaveBattery(orderList.get(j+1).getLaveBattery());
entityJ1.setVoltage(orderList.get(j+1).getVoltage());
// 交换一下位置
orderList.remove(j);
orderList.add(j, entityJ1);
orderList.remove(j+1);
orderList.add(j+1, entityJ);
}
}
}
}
思路简述
从集合中第一个实体对象开始,依次和集合中的后面的实体对象的电量值的大小进行对比。
如果第j个位置的实体对象的电量值大于第j+1个位置的实体对象的电量值,那么两个位置的实体对象进行互换。
让电量值更大的实体对象放在集合的后面位置,当所有的实体对象都比较完后,集合中最后一个位置的实体对象的电量值就是最大的了。
互换也很简单,先获取j位置和j+1位置的实体对象,然后集合先移除对象,再添加对象,就完成了互换。
效果图示
A little bit of progress every day!Come on!