zoukankan      html  css  js  c++  java
  • Java List如何移除不符合条件的数据

    1.普通人的第一反应(包括我自己),是for循环整个List,然后在循环体里面进行if条件判断,然后再调用list.remove(obj)方法来移除某个元素。

    代码示例

    List<Integer> list = new ArrayList<>();
            list.add(1);
            list.add(2);
            list.add(3);
            list.add(4);
            list.add(5);
            list.add(6);
            list.add(7);
            list.add(8);
            list.add(9);
            list.add(10);
            list.forEach(i -> {
                if(i%2==0){
                    list.remove(i);
                }
            });
    
            list.forEach(i -> {
                System.out.println(i);
            });

    但是如果你也这么写过的话,肯定知道这条路是行不通的,程序运行到这里会报异常。

    2.于是我们换了一种思路来考虑这个问题,那就是通过Iterator来实现这个效果

    代码示例

    List<Integer> list = new ArrayList<>();
            list.add(1);
            list.add(2);
            list.add(3);
            list.add(4);
            list.add(5);
            list.add(6);
            list.add(7);
            list.add(8);
            list.add(9);
            list.add(10);
    
            Iterator<Integer> iterator = list.listIterator();
            while (iterator.hasNext()) {
                Integer i = iterator.next();
                if(i%2==0){
                    iterator.remove();
                }
            }
    
            list.forEach(i -> {
                System.out.println(i);
            });

    首先,这种方案是可以行得通的,只是代码略微有些复杂。

    3.于是我们想到了第三种方案,那就是直接通过lambda表达式来实现。

    代码示例

    List<Integer> list = new ArrayList<>();
            list.add(1);
            list.add(2);
            list.add(3);
            list.add(4);
            list.add(5);
            list.add(6);
            list.add(7);
            list.add(8);
            list.add(9);
            list.add(10);
    
            list.removeIf(i -> i%2==0);
    
            list.forEach(i -> {
                System.out.println(i);
            });

    只要一行代码就可以实现整个处理,是不是显得很高大上。

    好了,这个简单的小测试就讲到这里。

    不过这也说明了一个道理,想要到达一个目的地,有很多条路可以选择,至于怎样选择,选择什么的路线,这就要看个人了。

    最后,希望大家可以在Java这条道路上越走越远,越走越顺。

  • 相关阅读:
    Docker常用命令操作记录
    第一个netty程序--时间服务
    zookeeper+dubbo配置
    通过IRBuilder新建LLVM IR
    TVM结构介绍
    /lib64/libc.so.6 错误导致的系统崩溃
    php 间歇性报 Segmentation fault
    Dell服务器安装OMSA管理工具
    【Selenium学习笔记】网页截图实践
    局域网内网机器上网实操
  • 原文地址:https://www.cnblogs.com/boboblue/p/14145397.html
Copyright © 2011-2022 走看看