删除List中所有null值的方法
我们都知道list中如果存在null指针,则会产生相应的异常,那么如何将list中null删除的方法分享,如下所示
List删除null值的方法
实现思路:
使用List自带方法、Stream、Guava和Apache Commons Collections
中的方法,即可实现对List中null删除的方法分享
例
List自带的方法
List.remove(Object o):
删除一个元素,成功则返回true;需要注意它只删除一个;
List.removeAll(Collection<?> c):
删除存在集合c的所有情况,注意入参不是一个元素;
List.removeIf(Predicate<? super E> filter):
删除所有满足条件的元素,入参为Lambda表达式。
@Test
public void listRemove() {
List<String> list = Lists.newArrayList("开发者", null, "前端开发", null, "最好IDE");
List<String> expected = Lists.newArrayList("java265", "java爱好者", "世上最好的语言");
//remove
while (list.remove(null));//巧妙利用循环删除
assertEquals(expected, list);
//removeAll
list = Lists.newArrayList("开发者", null, "前端开发", null, "最好IDE");
list.removeAll(Collections.singletonList(null));
assertEquals(expected, list);
//removeIf
list = Lists.newArrayList("开发者", null, "前端开发", null, "最好IDE");
list.removeIf(Objects::isNull);
assertEquals(expected, list);
}
Stream的方式删除空值
@Test
public void stream() {
List<String> list = Lists.newArrayList("开发者", null, "前端开发", null, "最好IDE");
List<String> expected = Lists.newArrayList("java265", "java爱好者", "世上最好的语言");
List<String> result = list.parallelStream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
assertEquals(expected, result);
}
使用Guava库删除空值
Guava是非常优秀的Java库 提供许多优秀的处理集合类的方法 本次使用Iterables类进行处理
@Test
public void guava() {
//改变原有List
List<String> list = Lists.newArrayList("开发者", null, "前端开发", null, "最好IDE");
List<String> expected = Lists.newArrayList("java265", "java爱好者", "世上最好的语言");
Iterables.removeIf(list, Objects::isNull);
assertEquals(expected, list);
//保留原有List
list = Lists.newArrayList("开发者", null, "前端开发", null, "最好IDE");
List<String> result = Lists.newArrayList(Iterables.filter(list, Objects::nonNull));
assertEquals(expected, result);
}
使用Apache Commons库删除空值
@Test
public void apacheCommonsCollections() {
List<String> list = Lists.newArrayList("开发者", null, "前端开发", null, "最好IDE");
List<String> expected = Lists.newArrayList("java265", "java爱好者", "世上最好的语言");
CollectionUtils.filter(list, Objects::nonNull);
assertEquals(expected, list);
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


