我搜索过,但是找到的都是用Python或R等其他语言的方法。
我有一个包含列表的列表,希望删除空列表。 例如:
[[abc,def],[ghi],[],[],[jkl,mno]]
我想要的结果是:
[[abc,def],[ghi],[jkl,mno]]
如何从列表中删除空列表? 谢谢!
你也可以尝试这个:
list.removeIf(p -> p.isEmpty());
list.removeIf(List::isEmpty);
- Lii你可以使用:
list.removeAll(Collections.singleton(new ArrayList<>()));
.removeAll(Collections.singleton(Collections.emptyList())
- blgtlist.removeAll(Collections.singleton(new ArrayList<>()));
上面的代码对许多情况都有效,但它依赖于列表中 equals 方法的实现,因此如果你有类似下面的代码,它将会失败。
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"));
一个解决方案是:
list.removeIf(x -> x != null && x.isEmpty());
如果你不担心equals方法的不同实现,那么你可以使用另一种解决方案。
java.util.List
的契约实际上指定了equals
的精确行为,以保证不会发生此问题。 当然,编译器无法强制执行这个契约的这个方面; 尽管如此,您示例中的问题在于AnotherList
违反了里氏替换原则。 应该修复该缺陷,而不是绕过它; 如果失败,则不应在期望List
或ArrayList
时使用它的实例。 - ruakh
list.removeAll(new ArrayList());
。 - Kon