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