场景图:
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;
}
}