JAVA8如何在遍历List时安全地删除元素

1.removeif

removeIf是Java8 Collecttion的一个默认方法;删除满足给定谓词的这个集合的所有元素

复制代码
  public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.addAll(Arrays.asList(10, 9, 8, 7, 6, 5, 4, 3, 2, 1));
 
        //Java8遍历和删除只有一短行就实现了
        list.removeIf(value -> value % 2 == 0);
        System.out.println(list);
    }

2.filter

filter都产生一个新的StatelessOp,也就新的流,通过opWrapSink不断匹配条件,当为false时则标记此流元素可过滤,生成新的List,不能直接操作原List

复制代码
   public static void main(String[] args) {
        List<Integer> list2 = new ArrayList<>();
        list2.addAll(Arrays.asList(10, 9, 8, 7, 6, 5, 4, 3, 2, 1));
        //java8这里的遍历和删除只有一短行就实现了 代码简洁,高效,线程安全。
        list2 = list2.stream().filter(value -> value % 2 != 0).collect(Collectors.toList());
        System.out.println(list);
    }

removeIf和filter方法都能达到过滤/删除元素的作用。

removeIf是条件为true则过滤此元素,false则保留。而filter则是条件为false过滤此元素,而true则保留。

因为removeIf返回的是boolean,而filter是个intermediate operation,需要terminal operation最终来处理流,如果只是单单只做删除/过滤操作, removeIf会快些。

相关推荐
稚南城才子,乌衣巷风流4 小时前
动态开点:原理、实现与应用场景
数据结构·算法
yyds_yyd_100864 小时前
1464. 数组中两元素的最大乘积(2026.07.27)
数据结构·c++·算法·leetcode
白白白小纯10 小时前
算法篇—返回倒数第k个节点
c语言·数据结构·算法·leetcode
无忧.芙桃10 小时前
数据结构之堆
c语言·数据结构·c++·算法·
小蒋学算法10 小时前
算法-删除元素后最大固定点数目-典型最长增长序列算法
数据结构·算法
白白白小纯11 小时前
算法篇—链表的中间节点
c语言·数据结构·算法·leetcode
程序喵大人11 小时前
【C++进阶】STL容器与迭代器 - 04 list 和 forward_list 用节点换稳定位置
开发语言·c++·list
pluviophile_s13 小时前
数据结构:第6讲:树与二叉树
数据结构·笔记
来一碗刘肉面13 小时前
字符串模式匹配(朴素模式匹配算法与KMP算法)
数据结构·算法
code bean1 天前
【C#】 `Channel<T>` 深度解析:生产者-消费者模式的现代解法
数据结构·c#