使用Java从ArrayList中删除所有空ArrayList

使用Java从ArrayList中删除所有空ArrayList,java,Java,我想查看我的ArrayList of ArrayList并删除所有空的ArrayList。有没有一个快速有效的方法来实现这一点,然后我猜一个for循环 输出示例: [alec,joe,ray],[eric,jacob],[ 然后看起来是这样的: package com.company; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; public class Main {

我想查看我的ArrayList of ArrayList并删除所有空的ArrayList。有没有一个快速有效的方法来实现这一点,然后我猜一个for循环

输出示例:

[alec,joe,ray],[eric,jacob],[

然后看起来是这样的:

package com.company;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;

public class Main {


    public static void main(String[] args) {

     ArrayList<ArrayList<Integer>> lista = new ArrayList<>(){{
         add(new ArrayList<>(Arrays.asList(1,2,3)));
         add(new ArrayList<>());
     }};

     Iterator<ArrayList<Integer>> iter = lista.iterator();

     while(iter.hasNext()){
         if (iter.next().isEmpty())
             iter.remove();
    }

        System.out.println(lista);

    }

}
亚历克,乔,雷,埃里克,雅各布


像这样的东西就足够了

nestedArrayList = nestedArrayList.stream()
    .filter(e -> !e.isEmpty())
    .collect(Collectors.toCollection(ArrayList::new));
或者正如Zabuza所建议的,您可以使用
removeIf

nestedArrayList.removeIf(ArrayList::isEmpty);

出于几个原因,我会选择第二种方法,但最重要的是,像“如果ArrayList为空,请删除nestedArrayList”这样的阅读方法可以提供更好的代码意图,并且更容易理解。

上面的Lambdas由Aomine或迭代器发布,如下所示:

package com.company;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;

public class Main {


    public static void main(String[] args) {

     ArrayList<ArrayList<Integer>> lista = new ArrayList<>(){{
         add(new ArrayList<>(Arrays.asList(1,2,3)));
         add(new ArrayList<>());
     }};

     Iterator<ArrayList<Integer>> iter = lista.iterator();

     while(iter.hasNext()){
         if (iter.next().isEmpty())
             iter.remove();
    }

        System.out.println(lista);

    }

}
package.com公司;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.Iterator;
公共班机{
公共静态void main(字符串[]args){
ArrayList lista=新的ArrayList(){{
添加(新的ArrayList(Arrays.asList(1,2,3));
添加(新的ArrayList());
}};
迭代器iter=lista.Iterator();
while(iter.hasNext()){
if(iter.next().isEmpty())
iter.remove();
}
System.out.println(lista);
}
}

工作完美,无需重新收集所有信息。你可以就地做。通过使用
List#removeIf
@Zabuza true也非常方便,在这种情况下,开销更小。将内容添加到列表中的方式看起来不同寻常。我的意思是它可能会工作,但不容易阅读。@Zabuza它是匿名类初始化,或者在stackoverflow上称为“双括号初始化”。这是一种快速初始化ArrayList的方法。是的,这是一种不寻常的风格,可能会让初学者感到困惑。所以我很高兴你加上了这个词。