使用Java从ArrayList中删除所有空ArrayList
我想查看我的ArrayList of ArrayList并删除所有空的ArrayList。有没有一个快速有效的方法来实现这一点,然后我猜一个for循环 输出示例: [alec,joe,ray],[eric,jacob],[ 然后看起来是这样的:使用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 {
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的方法。是的,这是一种不寻常的风格,可能会让初学者感到困惑。所以我很高兴你加上了这个词。