java-collection中的null,isEmpty

本文通过三种不同场景探讨了 Java 中 List 的 isEmpty 方法的使用方式及其潜在的问题,并介绍了如何使用 org.apache.commons.collections.CollectionUtils 来避免 NullPointerException 异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

只使用java utils包的isEmpty.

第一种情况:实例化list,但是size为空。

 

	List<String> list =new ArrayList<>();
		if (list.isEmpty()) {
			System.out.println("1");
		}
		if (!list.isEmpty()) {
			System.out.println("2");
		}
		if (list != null) {
			System.out.println("3");
		}
                if (list != null && list.size() > 0) {
                        System.out.println("4");
                }


输出:

 

 

1
3


第二种情况:add值到list中

 

 

 

 

		List<String> list =new ArrayList<>();
		list.add("da");
		if (list.isEmpty()) {
			System.out.println("1");
		}
		if (!list.isEmpty()) {
			System.out.println("2");
		}
		if (list == null) {
			System.out.println("3");
		}
                if (list != null && list.size() > 0) {
                        System.out.println("4");
                }

输出:

 

 

2
4

第三种情况:只创建list的引用,不实例化。

 

 

List<String> list = null;
		if (list.isEmpty()) {
			System.out.println("1");
		}
		if (!list.isEmpty()) {
			System.out.println("2");
		}
		if (list != null) {
			System.out.println("3");
		}
		if (list != null && list.size() > 0) {
			System.out.println("4");
		}

输出:

 

 

Exception in thread "main" java.lang.NullPointerException

 

改进办法:

使用org.apache.commons.collections.CollectionUtils;

CollectionUtils.isEmpty(Collecions<extend>);

可以避免

java.lang.NullPointerException异常

 

<think>好的,我现在要分析用户提供的这段Java代码,并解释它的作用。首先,我需要仔细阅读代码,理解每一部分的含义。 这段代码是`userDOS.removeIf((item) -> ObjectUtils.isEmpty(item.getIdNumber()));`。看起来它是在处理一个集合,可能是List类型的userDOS。removeIf方法用于移除满足特定条件的元素。这里的Lambda表达式`(item) -> ObjectUtils.isEmpty(item.getIdNumber())`作为参数传入,判断每个元素是否符合移除条件。 首先,我需要确认ObjectUtils.isEmpty的作用。通常,这个工具类方法来自Apache Commons Lang或者Spring Framework,用于检查对象是否为空。它会处理null的情况,以及字符串是否为empty(如空字符串"")。所以,当item的idNumber为空或空字符串时,ObjectUtils.isEmpty会返回true。 接下来,Lambda表达式对每个item执行检查,如果idNumber为空,该item就会被移除。因此,这段代码的作用是从userDOS集合中移除所有idNumber为空的用户对象。 但用户提到“将身份证号为不等于空的用户移除掉”,这似乎与代码逻辑相反。可能用户的需求是保留身份证号不为空的用户,而代码实际是移除身份证号为空的情况。这可能存在需求与实现不符的问题。需要确认用户的实际意图是否正确。 另外,需要注意removeIf会直接修改原集合,如果userDOS是不可变的集合(如Arrays.asList()返回的),会抛出异常。需要确保userDOS是可变的,比如ArrayList。 总结来说,这段代码的作用是移除所有身份证号(idNumber)为空的用户,但根据用户描述,可能存在需求理解上的误差,需要进一步确认。</think>这段Java代码的作用是**从`userDOS`集合中移除所有身份证号(`idNumber`)为空或空字符串的用户对象**。但根据你的中文描述“将身份证号为不等于空的用户移除掉”,**代码逻辑与需求存在矛盾**。具体分析如下: --- ### 代码逐层解析 ```java userDOS.removeIf((item) -> ObjectUtils.isEmpty(item.getIdNumber())); ``` 1. **`removeIf(Predicate)` 方法** - 这是Java 8+中`Collection`接口的方法,用于**移除集合中满足条件的元素**。 - 参数是一个Lambda表达式(即判断条件)。 2. **`ObjectUtils.isEmpty()` 的作用** - 通常来自`org.apache.commons.lang3.ObjectUtils`或`org.springframework.util.ObjectUtils`。 - **检查对象是否为空**:若`item.getIdNumber()`为`null`,或内容为空字符串`""`,返回`true`。 3. **Lambda表达式逻辑** - 对每个`item`,检查其`idNumber`是否为空。 - **如果条件为`true`,则移除该`item`**。 --- ### 代码实际效果 - **正确行为**:移除所有`idNumber`为空(包括`null`或`""`)的用户。 - **你描述的需求**:“移除身份证号不等于空的用户”(即保留空,移除非空)→ **与代码逻辑相反**。 --- ### 修正建议 若需实现描述的需求(移除身份证号非空的用户),应修改Lambda条件: ```java // 移除 idNumber 非空的用户 userDOS.removeIf(item -> !ObjectUtils.isEmpty(item.getIdNumber())); ``` --- ### 注意事项 1. **集合类型** 确保`userDOS`是**可变集合**(如`ArrayList`)。若为不可变集合(如`Arrays.asList()`生成),调用`removeIf`会抛出`UnsupportedOperationException`。 2. **空指针风险** - 若`item`本身可能为`null`,需先判空: ```java userDOS.removeIf(item -> item != null && !ObjectUtils.isEmpty(item.getIdNumber())); ``` 3. **性能影响** - `removeIf`会遍历整个集合,时间复杂度为O(n)。若集合极大,需考虑性能优化。 --- ### 完整示例 ```java import org.apache.commons.lang3.ObjectUtils; import java.util.ArrayList; import java.util.List; public class Demo { public static void main(String[] args) { List<User> userDOS = new ArrayList<>(); userDOS.add(new User("110101199003077000")); // 非空 userDOS.add(new User(null)); // 空 userDOS.add(new User("")); // 空 // 移除 idNumber 为空的用户 userDOS.removeIf(item -> ObjectUtils.isEmpty(item.getIdNumber())); System.out.println(userDOS.size()); // 输出:1(仅保留非空项) } } class User { private String idNumber; public User(String idNumber) { this.idNumber = idNumber; } public String getIdNumber() { return idNumber; } } ``` --- 若需求或代码逻辑需要进一步调整,请明确具体目标,我会协助优化实现。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值