List 中去除 null 方法讨论
先看下面的程序段:
public static void main(String[] args) {
List<Integer> arrays = new ArrayList<Integer>();
arrays.add(2);
arrays.add(null);
arrays.add(456);
arrays.add(null);
arrays.add(789);
System.out.println(arrays);
}
注:一个list,向其中插入数据时,也插入一些null。程序输出如下:
[2, null, 456, null, 789]
现在有这个需求:去除list中null 元素。尝试的代码如下:
public static void main(String[] args) {
List<Integer> arrays = new ArrayList<Integer>();
arrays.add(2);
arrays.add(null);
arrays.add(456);
arrays.add(null);
arrays.add(789);
arrays.remove(null);
System.out.println(arrays);
}
调用remove(object)方法,程序的输出如下:
[2, 456, null, 789]
可以看出:只remove了第一个null元素。这不是我们期望的结果。继续找方法。考虑到有一个removeAll(Collection<?> c) ,尝试使用。代码如下:
public static void main(String[] args) {
List<Integer> arrays = new ArrayList<Integer>();
arrays.add(2);
arrays.add(null);
arrays.add(456);
arrays.add(null);
arrays.add(789);
List<Integer> nullArr = new ArrayList<Integer>();
nullArr.add(null);
arrays.removeAll(nullArr);
System.out.println(arrays);
}
程序的输出如下:
[2, 456, 789]
这是我们期望的结果。你可能会尝试下面这样使用:
arrays.removeAll(null);
很遗憾,程序出错了:Exception in thread "main" java.lang.NullPointerException。
到这里,我们似乎找到了解决问题的办法。但是,如果我们的系统中,有这种类型的List<E>,如List<TempProductDto>、List<merchantDto> 时,
我们要从这些List中移除掉null,就要创建如下的代码:
List<TempProductDto> nullTempProd = new ArrayList<TempProductDto>(1);
nullTempProd.add(null); List<MerchantDto> nullMerchant = new ArrayList<MerchantDto>(1);
nullMerchant.add(null);
每种类型,就要创建对应类型的List,并把null 放入到List中。是不是很麻烦。能不能写个公用的Util类呢?以下是我写的Util 类:
import java.io.Serializable;
import java.util.AbstractList;
import java.util.RandomAccess; public class NullCollection extends AbstractList<Object>
implements RandomAccess, Serializable { private static final long serialVersionUID = 5206887786441397812L; @Override
public Object get(int index) {
return null;
} @Override
public int size() {
return 1;
} public boolean contains(Object obj) {
return null == obj;
} private Object readResolve() {
return null;
}
}
import java.util.Collection;
import java.util.List; public class YHDCollectionUtils { public static final Collection NULL_COLLECTION = new NullCollection(); public static final <T> Collection<T> nullCollection() {
return (List<T>) NULL_COLLECTION;
}
}
使用我写的util类进行测试。代码如下:
public static void main(String[] args) {
List<Integer> arrays = new ArrayList<Integer>();
arrays.add(2);
arrays.add(null);
arrays.add(456);
arrays.add(null);
arrays.add(789);
arrays.removeAll(YHDCollectionUtils.nullCollection());
System.out.println(arrays);
}
执行结果如下:
[2, 456, 789]
Util 类可以成功的去除List中的null元素。
也许你会问:为什么要把null放入List中,只有2B青年会这么干?在一般业务中,我们确实不需要把null放入List中,但有一种场景:
从页面封装的List,如下面的代码:
<input name="dto.productList[0].name" value="我是名称1">
<input name="dto.productList[0].price" value="我是价格1"> <input name="dto.productList[2].name" value="我是名称2">
<input name="dto.productList[2].price" value="我是价格2"> <input name="dto.productList[4].name" value="我是名称3">
<input name="dto.productList[4].price" value="我是价格3">
OGNL 会自动把dto.productList[1]、dto.productList[3] 的object封装成null。因此,我们在操作dto.productList 前,优先把 productList 中null去除掉,防止 null 引起的空指针异常。
最后,欢迎各位拍砖。
List 中去除 null 方法讨论的更多相关文章
- vb中的null.nothing.empty区别
以下内容源自互联网: 变量 A.B.C.D 分别等于 0."".Null. Empty. Nothing 的哪一个? Dim A Dim B As String Dim C As ...
- PHP中去除字符串中的换行的方法
在PHP中,有时候我们需要对字符串的换行进行过滤,比如天涯PHP博客中文章页面的description信息,我是直接截取的文章内容,并过滤掉html符号,最终还要过滤掉其中的换行.下面整理一下常见的去 ...
- dedecms中去除首页index.html的方法
本文介绍了dedecms中去除首页index.html的方法,有需要的朋友参考下. dedecms织梦cms建站程序输入地址后,而打开的实际地址后面有个index.html. 这里分享下两种解决方 ...
- Python关于去除字符串中空格的方法
Python关于去除字符串中空格的方法 在编写程序时我们经常会遇到需要将字符串中的空格去掉的情况,通常我们可以使用下面几种解决方法: 1.strip()方法:该方法只能把字符串头和尾的空格去掉,但是不 ...
- python 中去除空格的方法
python 中去除空格的方法: def trim(s): l=[] for i in s: if i!=' ': l.append(i) return ''.join(l) 其中可以使用下面的 '' ...
- Python中去除字符串中的单个或多个空格的方法总结
python中去除字符串中空格的方法比较多,单个看起来也都比较简单 但是使用起来容易发生混淆 为了加深记忆 将常用的去除字符串中空格的方法汇总如下 方法一:strip()方法 >>> ...
- JavaScript中的面向对象的讨论(转)
前言 今天,WEB2.0时代的到来,给了JavaScript又一次大展身手的机会.Web2.0借助JavaScript技术,使得客户端的Web体验更加丰富多彩,同时JavaScript面对的问题域也变 ...
- 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)
编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...
- 如何在Java中避免equals方法的隐藏陷阱
摘要 本文描述重载equals方法的技术,这种技术即使是具现类的子类增加了字段也能保证equal语义的正确性. 在<Effective Java>的第8项中,Josh Bloch描述了当继 ...
随机推荐
- iOS系列译文:自定义Collection View布局
原文出处: Ole Begemann 译文出处: 黄爱武(@answer-huang).欢迎加入技术翻译小组. UICollectionView在iOS6中第一次被介绍,也是UIKit视图类中的一 ...
- Markdown GUI编辑器推荐 windows mac
windows 1. MarkdownPad 如果右边不能预览: LivePreview is not working - it displays an error message stating T ...
- IntelliJ idea——》删除tag
查看git上所有tag E:\eju_IdeaProjects\house-platform>git tag --11v1. 20181107周三上线 20181120周二上线 v1.0.0 v ...
- android中实现毛笔效果(View 中画图)
近期有一个项目设计一个APP实现通过触摸屏实现毛笔写字效果.传统的绘画板程序直接通过Path的moveTo和LineTo便可实现简单的线条绘画程序.然而要达到毛笔的笔锋效果则须要更为具体点的设计.我的 ...
- WPF 员工卡条形码
大家都知道条形码(Barcode)是一种可以由机器识别的特殊编码,在生产.生活中也常常会见到并使用它.条形码的类型和种类很多感兴趣的朋友可以详细了解一下.其中Code 39 可以说是一种最为常见并广泛 ...
- android-support-v4.jar异常解决方法
1.当一个项目引入其他library项目时,会出现android-support-v4.jar冲突问题: 解决:将library项目中的android-support-v4.jar更新到最新,方法右键 ...
- 【BZOJ3640】JC的小苹果 概率DP+高斯消元
[BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. “你是我的小丫小苹果,怎么爱你都不嫌多!” “点亮我生命的火,火火火火火!” 话说JC历经艰辛来到了城市B,但 ...
- centos7 PXE自动安装环境搭建
原理: 要进行自动安装的主机A,加电启动时以网卡为第一启动设备 1.启动时会向网络广播,找到dhcp服务器B请求分配IP地址信息,服务器B除了给其分配基本的IP信息(ip.netmask.getewa ...
- Residual (numerical analysis)
In many cases, the smallness of the residual means that the approximation is close to the solution, ...
- 算法设计 mac 字符串 标识 n维度 2 3维度 字符串 标识值 特征值
基向量