我有一个像对象的arrayList:[object 1,object 2,null,null,..,null,object 3,null,null]
我尝试在对象2之后移动对象3而没有删除" null case",但它不起作用。所以我想从右到左迭代我的arrayList,检查该值是否为null,然后将对象3移到对象2后面。我确切地知道" null case&#34的数量;在对象2和对象3之间
我试着写下这个:
ArrayList<Type> subList = new ArrayList<Type>();
for (int i = 0; i < array.size(); i++) {
subList = array.get(i);
for (int j = subList.size(); j >=0 ; j--) {
if(subList.get(j)!=null) {
Collections.swap(subList, j, j-1);
}
}
}
编辑:
解决方案1:适用于我的项目
for(int i=0;i<subList.size();i++)
if(subList.get(i)!=null) {
for(int j=0;j<i;j++) {
if (subList.get(j)==null) {
Collections.swap(subList,i,j);
break;
}
}
}
}
解决方案2:复制其他arraylist 对我的项目不起作用,不知道为什么
List<String> strings = Arrays.asList(new String[]{"A", null, "B"});
List<String> result = new ArrayList<String>();
for(String string : strings) {
if(string != null)
result.add(string);
}
for (int i = 0, remaining = strings.size() - result.size(); i < remaining; i++) {
result.add(null);
}
答案 0 :(得分:0)
更新2:
要在没有创建任何新列表的情况下在对象之间交换,请使用Collections.swap();像这样:
public static void main(String[] args) {
ArrayList subList = new ArrayList();
subList.add("1");
subList.add("2");
subList.add(null);
subList.add(null);
subList.add("3");
for(int i=0;i<subList.size();i++)
if(subList.get(i)!=null) {
for(int j=0;j<i;j++) {
if (subList.get(j)==null) {
Collections.swap(subList,i,j);
break;
}
}
}
}
}
更新1:
试试这个:
public static void main(String[] args) {
ArrayList subList = new ArrayList();
subList.add("1");
subList.add("2");
subList.add(null);
subList.add(null);
subList.add("3");
subList=leftShift(subList);
}
public static ArrayList leftShift(ArrayList x){
ArrayList temp=new ArrayList();
int count=0;
for(Object t:x){
if(t!=null)
temp.add(t);
else
count++;
}
for (int i=0;i<count;i++)
temp.add(null);
return temp;
}
答案 1 :(得分:0)
int nullIndex = -1;
for (int i = 0; i < list.size(); i++) {
if (nullIndex==-1 && list.get(i) == null) {
System.out.println("nullIndex ="+i);
nullIndex = i;
} else if (nullIndex >= 0 && list.get(i) != null) {
System.out.println("swap ="+i+" "+nullIndex);
list.set(nullIndex, list.get(i));
list.set(i, null);
i = nullIndex;
nullIndex=-1;
}
}
抱歉,我忘了你正在使用arraylist,你可以做到这一点更简单
int counter=0;
while(subList.contains(null)){
subList.remove(null);
counter++;
};
while(counter>0){
subList.add(null);
counter--;
}