优雅实现移除元素前将集合转为可变集合的方法?有无通用库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
相关产品推荐
相关产品推荐

