java 多个设备,锁定先后顺序

时间:2022-04-21 16:41:47

场景图:

java 多个设备,锁定先后顺序

 

4台android设备需要被锁定顺序,下次的时候按顺序socket推送数据到这4台不同的内容。当有新的一台机器加入时,如上图的E,则插入到原位置为C的地方。具体代码如下:

public static ArrayList<DeviceLoginEntity> setDeviceOrder(ArrayList<DeviceLoginEntity> devices,String orderStr)
    {
        if(StringUtil.isNullorEmpty(orderStr) || devices == null || devices.size() <= 0)
        {
            Log.v("DeviceUtil", "if(StringUtil.isNullorEmpty(orderStr) || devices == null || devices.size() > 0)直接返回devices");
            return devices;
        }
        else
        {
            Log.v("setDeviceOrder", "orderStr="+orderStr);
            String[] orderStrArr = orderStr.split("\\|");
            //优先将devices中存在的,
            for(int i=0;i<orderStrArr.length;i++)
            {
                for(int j=0;j<devices.size();j++)
                {
                    if(orderStrArr[i].equals(devices.get(j).android_id))
                    {
                        devices.get(j).sn = i;
                    }
                }
            }
            //将里面涉及到devices.get(j).sn=默认值100的情况设置为不在{1,2,3,4}里面的情况
            int flag = -1;
            for(int i=0;i<devices.size();i++)
            {
                int j = 0;
                for(j=0;j<devices.size();j++)
                {
                    if(devices.get(j).sn == i)
                    {break;}
                }
                if(j == devices.size())  //说明没有找到
                {
                    flag = i;
                    break;
                }
            }
            for(int i=0;i<devices.size();i++)
            {
                if(devices.get(i).sn == 100 && flag !=-1)
                {
                    //那么则将该sn置为devices.get(i).sn不存在的数字
                    devices.get(i).sn = flag;
                }
            }
            //再将devices的sn进行排序,越小越在前面
            Comparator<DeviceLoginEntity> comparator = new Comparator<DeviceLoginEntity>(){  
                    public int compare(DeviceLoginEntity s1, DeviceLoginEntity s2) {
                        if(s1.sn < s2.sn){
                            return -1;
                        }  
                        else
                            return 1;
                    }  
                };  
            Collections.sort(devices, comparator);//按照属性sn排序,从小到大
//            for(DeviceLoginEntity en:devices)
//            {
//                Log.e("setDeviceOrder", "DeviceLoginEntity="+en.android_id+";sn="+en.sn);
//            }
            return devices;
        }
    }