寻求List原地过滤的合法实现方式(已使用removeIf方法)
List原地过滤的合法实现(基于Stream)
你可以通过先获取过滤结果、清空原列表、再将过滤结果添加回原列表的方式实现原地过滤,这是合法且符合Java规范的做法,示例代码如下:
// 先收集过滤后的元素到临时集合 List<Product> filtered = products.stream().filter(product -> { // 这里写你的过滤逻辑,比如筛选价格大于100的商品 return product.getPrice() > 100; }).collect(Collectors.toList()); // 清空原列表,再添加过滤后的元素,实现原地修改 products.clear(); products.addAll(filtered);
如果你想把逻辑整合到Stream的collect操作中,也可以用collectingAndThen来完成:
products.stream().filter(product -> { return product.getPrice() > 100; }).collect(Collectors.collectingAndThen(Collectors.toList(), filtered -> { products.clear(); products.addAll(filtered); return products; }));
需要注意的是,Stream API的设计初衷是为了生成新的集合而非修改原有集合,所以上述方式本质是借助临时集合完成原地更新,这是在不使用removeIf的前提下,最稳妥的原地过滤实现方式。
内容的提问来源于stack exchange,提问作者amangupta
相关产品推荐
相关产品推荐

