Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从ArrayList中删除项目<;ArrayList<;T>&燃气轮机&燃气轮机;_Java_List_Arraylist - Fatal编程技术网

Java 从ArrayList中删除项目<;ArrayList<;T>&燃气轮机&燃气轮机;

Java 从ArrayList中删除项目<;ArrayList<;T>&燃气轮机&燃气轮机;,java,list,arraylist,Java,List,Arraylist,在下面的代码中,我想在第一个“for循环”中从arraylist中删除null或arraylist大小为零的项。在运行第一个循环之后,我又有了第二个循环。在第二个循环中,我测试了它是否包含任何为null的项或项的大小为零的项。虽然我在第一个循环中删除了,但ArrayList BS包含从列表中删除的项 ArrayList<ArrayList<Record>> BS = new ArrayList<>(); . .// some codes . for (in

在下面的代码中,我想在第一个“for循环”中从arraylist中删除null或arraylist大小为零的项。在运行第一个循环之后,我又有了第二个循环。在第二个循环中,我测试了它是否包含任何为null的项或项的大小为零的项。虽然我在第一个循环中删除了,但ArrayList BS包含从列表中删除的项

ArrayList<ArrayList<Record>> BS = new ArrayList<>(); 
.
.// some codes
.

for (int j = 0; j < BS.size(); j++) {
    if(BS.get(j) == null || BS.get(j).size() == 0){
        BS.remove(j);
    }
}


for (int j = 0; j < BS.size(); j++) {
    if(BS.get(j) == null || BS.get(j).size() == 0){
            System.out.println("Again, fall into if condition");
    }
}
ArrayList BS=new ArrayList();
.
.//一些代码
.
对于(int j=0;j
您遇到的问题是,您不会在删除项目后立即检查该项目

要么:

BS.removeIf(a -> a == null || a.isEmpty());
或者反向迭代列表:

for (int j = BS.size() - 1; j >= 0; j--) { ... }
或者使用
迭代器
,并使用
remove()
方法

Iterator<? extends List<Record>> it = BS.iterator();
while (it.hasNext()) {
  List<Record> list = it.next();
  if (list == 0 || list.isEmpty()) it.remove();
}

Iterator这里的问题是,您不会在删除项目后立即检查该项目

要么:

BS.removeIf(a -> a == null || a.isEmpty());
或者反向迭代列表:

for (int j = BS.size() - 1; j >= 0; j--) { ... }
或者使用
迭代器
,并使用
remove()
方法

Iterator<? extends List<Record>> it = BS.iterator();
while (it.hasNext()) {
  List<Record> list = it.next();
  if (list == 0 || list.isEmpty()) it.remove();
}

Iterator问题是当一个项被删除时,如果条件为真,下一个项将不会被删除。为此,在删除项目时,应减小索引

更改如下

ArrayList<ArrayList<Record>> BS = new ArrayList<>(); 
.
.// some codes
.

for (int j = 0; j < BS.size(); j++) {
    if(BS.get(j) == null || BS.get(j).size() == 0){
        BS.remove(j);
        j--;
    }
}
ArrayList BS=new ArrayList();
.
.//一些代码
.
对于(int j=0;j
问题是,当一个项目被删除时,如果条件为真,下一个项目将不会被删除。为此,在删除项目时,应减小索引

更改如下

ArrayList<ArrayList<Record>> BS = new ArrayList<>(); 
.
.// some codes
.

for (int j = 0; j < BS.size(); j++) {
    if(BS.get(j) == null || BS.get(j).size() == 0){
        BS.remove(j);
        j--;
    }
}
ArrayList BS=new ArrayList();
.
.//一些代码
.
对于(int j=0;j
从数组中删除项时,通常需要从最后一项转到第一项,否则每次删除时,索引都会跳转一项

这是因为移除一个项目会将其余项目移回一个位置,即从位置“j+1”移到位置j。因此,下一个循环跳过项目a位置j(即上一个循环中处于位置j+1的项目)

试试这个:

for (int j = BS.size() - 1; j >= 0; j--) {
    if(BS.get(j) == null || BS.get(j).size() == 0){
        BS.remove(j);
    }
}

从数组中删除项时,通常要从最后一项转到第一项,否则每次删除时,索引都会跳转一项

这是因为移除一个项目会将其余项目移回一个位置,即从位置“j+1”移到位置j。因此,下一个循环跳过项目a位置j(即上一个循环中处于位置j+1的项目)

试试这个:

for (int j = BS.size() - 1; j >= 0; j--) {
    if(BS.get(j) == null || BS.get(j).size() == 0){
        BS.remove(j);
    }
}