如何从列表中删除空列表(Java)

时间:2015-07-03 00:17:41

标签: java list arraylist

我已经搜索了这个,但它在其他语言中,如Python或R(?)。 我在列表中有列表,我想删除空列表。 例如:

  

[[abc,def],[ghi],[],[],[jkl,mno]]

我想:

  

[[abc,def],[ghi],[jkl,mno]]

如何从列表中删除空列表? 谢谢!

3 个答案:

答案 0 :(得分:25)

你也可以试试这个:

list.removeIf(p -> p.isEmpty());

答案 1 :(得分:12)

您可以使用:

list.removeAll(Collections.singleton(new ArrayList<>()));

答案 2 :(得分:11)

library(dplyr)

df %>% group_by(x) %>%
       summarise(n = sum(y %in% na.omit(z)))

上面的代码适用于很多情况,但它依赖于列表中List的 equals 方法实现,所以如果你有类似下面的代码,它将会失败。

list.removeAll(Collections.singleton(new ArrayList<>()));

解决方案是:

public class AnotherList extends ArrayList<String> {
    @Override
    public boolean equals(Object o) {
        return o instanceof AnotherList && super.equals(o);
    }
}

List<List<String>> list = new ArrayList<>();
list.add(Arrays.asList("abc", "def"));
list.add(Arrays.asList("ghi"));
list.add(new ArrayList<String>());
list.add(new ArrayList<String>());
list.add(new AnotherList());
list.add(null);
list.add(Arrays.asList("jkl", "mno"));

如果您不担心 equals 方法的不同实现,您可以使用其他解决方案。