zoukankan      html  css  js  c++  java
  • 集合去除元素

    业务场景

    集合A 包含 1,2,3,4,5 等数据
    集合B 包含 2,6 数据
    要求 剔除 集合A中B的重复数据

    1.集合元素删除

    List<String> moveList = new ArrayList<>();
    moveList.add("5");
    moveList.add("6");
    List<String> allList = new ArrayList<>();
    allList.add("1");
    allList.add("2");
    allList.add("3");
    allList.add("4");
    allList.add("5");
    allList.add("6");
    allList.add("9");
    for (String move :moveList){
        for (String all: allList){
            if(move.equals(all)){
                allList.remove(all);
            }
        }
    }
    for (String n : allList){
        System.out.print(n+" ");
    }
    

    是不是看起来没什么问题。。。。
    运行一下

    Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
    at java.util.ArrayList$Itr.next(ArrayList.java:859)
    
    ConcurrentModificationException 可以自行百度。不再赘述。

    2.集合删除改造版本 iterator

    public static void main(String[] args) {
            List<String> moveList = new ArrayList<>();
            moveList.add("5");
            moveList.add("6");
            List<String> allList = new ArrayList<>();
            allList.add("1");
            allList.add("2");
            allList.add("3");
            allList.add("4");
            allList.add("5");
            allList.add("6");
            allList.add("9");
            Iterator<String> iterator = allList.iterator();
            for (String move : moveList) {
                while (iterator.hasNext()){
                    String next = iterator.next();
                    if (next.equals(move)){
                        iterator.remove();
                        break;
                    }
                }
            }
            for (String n : allList) {
                System.out.print(n + " ");
            }
        }
    

    运行一下,搞定

    1 2 3 4 9 
    Process finished with exit code 0
    

    3. 换一种写法 jdk1.8 流特性 Stream

    static boolean isSame(List<String> list, String element){
        for (String l:list){
            if(element.equals(l)){
                return false;
            }
        }
        return true;
    }
    
    public static void main(String[] args) {
        List<String> moveList = new ArrayList<>();
        moveList.add("5");
        moveList.add("6");
        List<String> allList = new ArrayList<>();
        allList.add("1");
        allList.add("2");
        allList.add("3");
        allList.add("4");
        allList.add("5");
        allList.add("6");
        allList.add("9");
        Stream<String> stream = allList.stream();
        List<String> result = stream.filter(c -> isSame(moveList, c)).collect(Collectors.toList());
        for (String n : result) {
            System.out.print(n + " ");
        }
    
    }
    

    运行一下,搞定

    1 2 3 4 9 
    Process finished with exit code 0
    
    同时,对于初始化集合优化
    //Arrays.asList()
    List<String> moveList = Arrays.asList("5","11");
    
  • 相关阅读:
    [zt]在XML序列化时去除默认命名空间xmlns:xsd和xmlns:xsi
    线程间操作无效: 从不是创建控件“...”的线程访问它。
    Unity IoC + WCF + wsHTTPBinding + Certificate Authorization
    [转]PowerDesigner使用教程 —— 概念数据模型
    C# Post数据和接收简单示例【摘】
    163相册验证码图片的识别手记之一 去除干扰
    实现WCF和Unity 的集成
    Html.ActionLink 几种重载方式说明及例子
    如何从程序员到项目经理【转帖51cto】
    OSG闪存
  • 原文地址:https://www.cnblogs.com/lvshichao/p/14358617.html
Copyright © 2011-2022 走看看