实体对象集合中根据实体对象的某一属性进行大小排序

背景

今天我的领导跟我提了一个小小的建议,我觉得很不错。我有这么一个界面,显示的是小车的电量信息,界面很简单,简单的由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!

猜你喜欢

转载自blog.csdn.net/csdnzouqi/article/details/79810050