java list 去除null_List 中去除 null 方法讨论

先看下面的程序段:

public static voidmain(String[] args) {

List arrays = new ArrayList();

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 voidmain(String[] args) {

List arrays = new ArrayList();

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 voidmain(String[] args) {

List arrays = new ArrayList();

arrays.add(2);

arrays.add(null);

arrays.add(456);

arrays.add(null);

arrays.add(789);

List nullArr = new ArrayList();

nullArr.add(null);

arrays.removeAll(nullArr);

System.out.println(arrays);

}

程序的输出如下:

[2, 456, 789]

这是我们期望的结果。你可能会尝试下面这样使用:

arrays.removeAll(null);

很遗憾,程序出错了:Exception in thread "main" java.lang.NullPointerException。

到这里,我们似乎找到了解决问题的办法。但是,如果我们的系统中,有这种类型的List,如List、List 时,

我们要从这些List中移除掉null,就要创建如下的代码:

List nullTempProd = new ArrayList(1);

nullTempProd.add(null);

List nullMerchant = new ArrayList(1);

nullMerchant.add(null);

每种类型,就要创建对应类型的List,并把null 放入到List中。是不是很麻烦。能不能写个公用的Util类呢?以下是我写的Util 类:

importjava.io.Serializable;importjava.util.AbstractList;importjava.util.RandomAccess;public class NullCollection extends AbstractList

implementsRandomAccess, Serializable {private static final long serialVersionUID = 5206887786441397812L;

@Overridepublic Object get(intindex) {return null;

}

@Overridepublic intsize() {return 1;

}public booleancontains(Object obj) {return null ==obj;

}privateObject readResolve() {return null;

}

}

importjava.util.Collection;importjava.util.List;public classYHDCollectionUtils {public static final Collection NULL_COLLECTION = newNullCollection();public static final CollectionnullCollection() {return (List) NULL_COLLECTION;

}

}

使用我写的util类进行测试。代码如下:

public static voidmain(String[] args) {

List arrays = new ArrayList();

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,如下面的代码:

OGNL 会自动把dto.productList[1]、dto.productList[3] 的object封装成null。因此,我们在操作dto.productList 前,优先把 productList 中null去除掉,防止 null 引起的空指针异常。

最后,欢迎各位拍砖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值