java中list去除空值
介绍:
在本文中,我们将学习如何使用普通的Java,Java 8 lambda表达式和某些第三方库从Java 列表中删除空值 。
所以,让我们开始吧!
从Java中的
让我们探索从Java 列表中删除null的不同方法:
1. Java 7或更低版本:
当使用Java 7或更低版本时,我们可以使用以下结构从列表中删除所有空值 :
Java
@Test
public removeAllNullsFromListWithJava7OrLower() {
List list =
new ArrayList<>(Arrays.asList("A", null, "B", null));
list.removeAll(Collections.singleton(null));
assertThat(list, hasSize(2));
}
请注意,我们在此处创建了一个可变列表。 尝试从不可变列表中删除null将抛出java.lang.UnsupportedOperationException 。
2. Java 8或更高版本:
从Java 8或更高版本的Java 列表中删除空值的方法非常直观且优雅:
@Test
public removeAllNullsFromListWithJava8() {
List list =
new ArrayList<>(Arrays.asList("A", null, "B", null));
list.removeIf(Objects::isNull);
assertThat(list, hasSize(2));
}
我们可以简单地使用removeIf()构造来删除所有空值。
如果我们不想更改现有列表,而是返回一个包含所有非空值的新列表,则可以:
Java
@Test
public removeAllNullsFromListWithJava8() {
List list =
new ArrayList<>(Arrays.asList("A", null, "B", null));
List newList = list.stream().filter(Objects::nonNull)
.collect(Collectors.toList());
assertThat(list, hasSize(4));
assertThat(newList, hasSize(2));
}
我们可以在此处了解有关Java 8流收集器的更多信息。
3. Apache Commons:
Apache Commons CollectionUtils类提供了一个filter(Iterable,Predicate)方法,该方法也可以解决我们的目的。 传入的谓词将应用于列表中的所有元素:
Java
@Test
public removeAllNullsFromListWithApacheCommons() {
List list =
new ArrayList<>(Arrays.asList("A", null, "B", null));
CollectionUtils.filter(list, PredicateUtils.notNullPredicate());
assertThat(list, hasSize(2));
}
从而,从现有列表中过滤掉所有空值 。
4. Google Guava:
Guava中的Iterables类提供了removeIf(Iterable,Predicate)方法,以帮助我们根据给定的谓词过滤值。 让我们看看如何利用它来发挥我们的优势:
Java
@Test
public removeAllNullsFromListUsingGuava() {
List list =
new ArrayList<>(Arrays.asList("A", null, "B", null));
Iterables.removeIf(list, Predicates.isNull());
assertThat(list, hasSize(2));
}
另外,如果我们不想修改现有列表,Guava允许我们创建一个新的过滤列表:
Java
@Test
public removeAllNullsFromListUsingGuava() {
List list =
new ArrayList<>(Arrays.asList("A", null, "B", null));
List newList = new ArrayList<>(
Iterables.filter(list, Predicates.notNull()));
assertThat(list, hasSize(4));
assertThat(newList, hasSize(2));
}
Java
@Test
public removeAllNullsFromList() {
List list =
new ArrayList<>(Arrays.asList("A", null, "B", null));
List newList = new ArrayList<>(
Iterables.filter(list, Predicates.notNull()));
assertThat(list, hasSize(4));
assertThat(newList, hasSize(2));
}
结论:
在本快速教程中,我们探索了多种方法可以从Java 列表中删除所有空值 。
成为第一个发表评论的人。
翻译自: https://www.javacodegeeks.com/2019/03/java-remove-nulls-from-list.html
java中list去除空值