Java –从列表中删除所有空值

介绍:

在本文中,我们将学习如何使用普通的Java,Java 8 lambda表达式和某些第三方库从Java 列表中删除空值

所以,让我们开始吧!

从Java中的

让我们探索从Java 列表中删除null的不同方法:

1. Java 7或更低版​​本:

使用Java 7或更低版​​本时,我们可以使用以下结构从列表中删除所有空值

Java

@Test
public removeAllNullsFromListWithJava7OrLower() {List<String> 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<String> list =new ArrayList<>(Arrays.asList("A", null, "B", null));list.removeIf(Objects::isNull);assertThat(list, hasSize(2));
}

我们可以简单地使用removeIf()构造来删除所有值。

如果我们不想更改现有列表,而是返回带有所有非空值的新列表,则可以使用:

Java

@Test
public removeAllNullsFromListWithJava8() {List<String> list =new ArrayList<>(Arrays.asList("A", null, "B", null));List<String> 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<String> 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<String> list =new ArrayList<>(Arrays.asList("A", null, "B", null));Iterables.removeIf(list, Predicates.isNull());assertThat(list, hasSize(2));
}

另外,如果我们不想修改现有列表,Guava允许我们创建一个新的过滤列表:

Java

@Test
public removeAllNullsFromListUsingGuava() {List<String> list =new ArrayList<>(Arrays.asList("A", null, "B", null));List<String> newList = new ArrayList<>(Iterables.filter(list, Predicates.notNull()));assertThat(list, hasSize(4));assertThat(newList, hasSize(2));
}

Java

@Test
public removeAllNullsFromList() {List<String> list =new ArrayList<>(Arrays.asList("A", null, "B", null));List<String> 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

飞畅科技关于网管型环网交换机的工作原理介绍

现如今&#xff0c;随着通信产业的发展和国民经济信息化的发展&#xff0c;管理型环网交换机市场稳步增长。 它的成本效益高&#xff0c;高度灵活性&#xff0c;相对简单并且易于实施。 以太网技术已成为当今重要的LAN网络技术&#xff0c;并且管理型环网交换机已成为人们深受欢…

无线数传在桥梁检测中传感器信号的采集应用

桥梁检测是利用传感器感受被测物体的物理量信号&#xff0c;并将感受到的信号&#xff0c;按一定的规律转换为电信号输出&#xff1b;然后使用自动采集装置采集传感器的电信号&#xff0c;并使用无线数据传输模块将数据上传到远端服务器上&#xff0c;以满足信息的处理、存储、…

交换机该选择千兆还是百兆的呢?

为能负载现在越来越复杂的视频监控系统网络&#xff0c;交换机需要接入的摄像头数量也就越多&#xff0c;交换机的数据量就越大&#xff0c;交换机必须具备非常稳定的转换数据的能力来传输大量而又持续的视频数据。那么&#xff0c;交换机该选择千兆还是百兆的呢&#xff1f;接…

c语言减去随机数为负数,scratch教程:随机数和负数的概念

记得在之前的兴趣课程里面有提到过几个随机数和负数的概念&#xff0c;对于很多刚刚接触编程的小朋友可能还不知道什么是随机数、什么是负数&#xff1f;先说概念随机数是专门的随机试验的结果。 随机数最重要的特性是:它所生成的后面的那个数与前面的那个数毫无关系。通俗的讲…

CC1310射频芯片的433M无线模块设计

1、特点 CC1310是TI公司最新推出的高效型/超低功耗无线MCU中低于1GHz系列器件的重要器 件。极低的有源RF和MCU电流以及低功耗模式流耗可确保电池的使用寿命&#xff0c;允许在能源采集应用中使用小型纽扣电池。 CC1310器件在支持多个物理层和RF标准的平台中将灵活的超低功耗RF收…

电源模块的9个主要性能指标及其作用

一、电源模块的作用和优势 电源模块是电压转换设备之一&#xff0c;它的主要功能是将交流电和直流电相互转换&#xff0c;除此之外&#xff0c;它还具有维护方便&#xff0c;设计灵活&#xff0c;节省成本和时间&#xff0c;高功率&#xff0c;高效率和高可靠性的优点。 在某种…

飞畅科技教你如何选择合适的PoE交换机?

PoE交换机除了具备普通交换机的功能外&#xff0c;还具备有PoE供电功能&#xff0c;可以给网络摄像机&#xff08;IPC&#xff09;、无线AP等网络设备供电&#xff0c;从而让它们免去了繁杂的电源布线。选择合适的PoE交换机就需要注意以下要点&#xff1a; 1、供电标准 确定受…

电源模块怎么选?以下6点你都知道吗?

1、查看电源模块的电路设计原理与过程 电源电路的设计原理往往需要专业人员来辨别区分&#xff0c;但市场上电源模块大致分为裸板和灌封。 裸板式电源模块&#xff1a;裸板比灌封更加直观明了&#xff0c;可以从表面查看电子元器件的布局合理有序、焊锡灯美观等。 灌封式电源…

天线的安装对通信效果有什么影响?

上周我们介绍的天线的基础知识&#xff0c;今天亿佰特为大家介绍一下天线的安装队通信效果的影响。随着科技的发展&#xff0c;无线通信越来越深入我们的工作和生活中&#xff0c;同时天线也变成了我们生活中最常见的物品。 天线是一种能量变换器&#xff0c;它把传输线上传播的…

工业以太网交换机常见故障排除的三种方法

工业以太网交换机是组网中的重要设备&#xff0c;如果其出现问题将会影响到整个网络体系&#xff0c;局域网中的计算机往往都是连接到交换机设备上&#xff0c;并通过该设备进行相互交换、处理数据的&#xff0c;可以这样说&#xff0c;交换机工作状态的好坏会对局域网网络的整…

【渝粤教育】国家开放大学2018年秋季 0691-21T物理化学及实验 参考试题

试卷编号&#xff1a;0695 2018—2019学年度第1学期期末考试 《农业企业经营管理》试题答案 1、农业企业产品质量控制&#xff1a;指农业企业通过采取一系列作业技术和活动对产品质量形成的各个过程实施控制&#xff0c;包括原材料的采购、生产过程的控制、储运过程控制、包装…

java8 快排_Java 8快多少?

java8 快排Java SE 8已于昨天发布 。 传统上&#xff0c;每个新的主要JRE版本都提供免费的性能提升。 我们还能再获得免费午餐吗&#xff1f; 这次收益有多大&#xff1f; 让我们对其进行基准测试。 基准方法 使用3个不同的JRE版本&#xff08;SunJDK 1.6.0_26 &#xff0c;O…

android交互功能,Android 用户界面交互---拖放(OnDragListener)

设计拖放操作本节主要内容如下&#xff1a;1. 如何开始拖拽&#xff1b;2. 在拖拽期间如何响应事件&#xff1b;3. 如何响应落下事件&#xff1b;4. 如何结束拖放操作。开始拖拽用户使用一个拖拽手势开始拖拽&#xff0c;通常是在View对象上长按。在响应中&#xff0c;应该…

蓝牙模块智能灯控应用方案

当今是信息高速发展的时代&#xff0c;经济、文化的流行与传播都离不开信息。信息的传递直接影响着人们生活的方方面面&#xff0c;信息的传递方式又各有不同&#xff0c;如有线传输、无线传输等&#xff1b;而无线传输还可按协议不同分为&#xff1a;蓝牙、WIFI、zigbee、LoRa…

【渝粤教育】国家开放大学2018年秋季 0717-22T社会保障基础 参考试题

科目编号&#xff1a;[0721] 座位号 2018-2019学年度第一学期期末考试 财务管理实务 试题 2019年 1月 一、单选题&#xff08;本大题共10小题&#xff0c;每小题3分&#xff0c;共计30分&#xff09; &#xff08;★请考生务必将答案填入到下面对应序号的答题框中★&#xff0…

弱电安防关于交换机的一些常用专业术语介绍

交换机根据工作位置的不同&#xff0c;可以分为广域网交换机和局域网交换机。最常见的交换机是以太网交换机&#xff0c;其他常见的还有电话语音交换机、光纤交换机等。那么&#xff0c;关于交换机的一些常用术语你是否了解呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来…

LoRa和ZigBee谁更适合智能家居?

智能家居&#xff0c;是近几年来市场的宠儿。作为一个新产业&#xff0c;现在一个导入期与成长期的临界点。智能家居的市场消费观念还未形成&#xff0c;但随着智能家居市场的推广普及&#xff0c;消费者使用习惯的变化&#xff0c;智能家居市场的消费潜力必然是巨大的。 那么L…

【渝粤教育】国家开放大学2018年秋季 1063t现代货币金融学说 参考试题

试卷代号&#xff1a;1076 常微分方程 试题&#xff08;半开卷&#xff09; 2019年1月 一、单项选择题&#xff08;每小题3分&#xff0e;本题共15分&#xff09; 1&#xff0e;微分方程xy’l的通解为y( )&#xff0e; A&#xff0e;CInx B&#xff0e;C- Inx C&#xff0e;Cln…

Java中的PriorityBlockingQueue

介绍&#xff1a; Java中的PriorityBlockingQueue实现了BlockingQueue接口并支持PriorityQueue的功能。 那么&#xff0c;什么是BlockingQueue&#xff1f; 以下适用于BlockingQueue的任何实现&#xff1a; 尝试检索元素时&#xff0c;如果队列为空&#xff0c;线程将等待 在…

android 火狐 插件,最新Android版Firefox浏览器不再支持现有插件

原标题&#xff1a;最新Android版Firefox浏览器不再支持现有插件火狐背后的非盈利组织Mozilla最近还为Android重新设计了浏览器&#xff0c;几乎丢掉了用户多年来习惯的许多惯例和功能&#xff0c;只有少数插件在新版Android浏览器启动时可以使用。在某种程度上&#xff0c;新的…