You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

优雅实现移除元素前将集合转为可变集合的方法?有无通用库API?

解决方案

首先,Java标准库本身没有直接将「复制为可变集合+移除元素」合并为单一步骤的API,但可以通过Stream API实现等价的简洁写法,无需额外依赖:

public void removeNull(List<String> strList) {
    strList = strList.stream()
                     .filter(Objects::nonNull)
                     .collect(Collectors.toCollection(ArrayList::new));
}

这段代码逻辑和你原代码完全一致:基于原集合生成新的可变ArrayList,同时过滤掉null元素,一步完成集合复制与元素移除。

如果允许使用第三方类库,有更简洁的实现方式:

1. Guava类库

import com.google.common.collect.Lists;
import com.google.common.base.Predicates;

public void removeNull(List<String> strList) {
    strList = Lists.newArrayList(Lists.filter(strList, Predicates.notNull()));
}

2. Apache Commons Collections类库

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.PredicateUtils;

public void removeNull(List<String> strList) {
    strList = new ArrayList<>(CollectionUtils.filteredCollection(strList, PredicateUtils.notNullPredicate()));
}

这些写法本质都是先将原集合复制到可变容器,再过滤目标元素,和你原代码的防御式编程思路一致,能避免原集合不可变导致的操作异常。

内容的提问来源于stack exchange,提问作者Dreamer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:00:12