Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较两个大小不等的数组列表,并扔掉那些不';我没有火柴_Java - Fatal编程技术网

Java 比较两个大小不等的数组列表,并扔掉那些不';我没有火柴

Java 比较两个大小不等的数组列表,并扔掉那些不';我没有火柴,java,Java,我想扔掉在persons arrayList中没有匹配项的FormBean对象。 抱歉,如果代码格式不正确 我有一个这样的arraylist ArrayList persons = new ArrayList(); persons.add("Bill"); persons.add("Chuck"); persons.add("Marry"); ArrayList objects = new ArrayList() for (i++; i < 5; i++) { object

我想扔掉在persons arrayList中没有匹配项的FormBean对象。 抱歉,如果代码格式不正确

我有一个这样的arraylist

ArrayList persons = new ArrayList(); 
persons.add("Bill"); 
persons.add("Chuck"); 
persons.add("Marry");
ArrayList objects = new ArrayList()
for (i++; i < 5; i++) {
    objects.add(FormBean);
}
然后我有另一个arraylist(大小不等)像这样

ArrayList persons = new ArrayList(); 
persons.add("Bill"); 
persons.add("Chuck"); 
persons.add("Marry");
ArrayList objects = new ArrayList()
for (i++; i < 5; i++) {
    objects.add(FormBean);
}

是否有一种方法可以将persons arraylist与FormBean对象中的person进行比较,并抛出persons arraylist中不匹配的FormBean对象。

首先。这是WTF吗

ArrayList objects = new ArrayList()
for (i++; i < 5; i++) {
    objects.add(FormBean);
}
ArrayList对象=新建ArrayList()
对于(i++;i<5;i++){
add(FormBean);
}
我是什么

只需在对象列表中循环,检查每个对象在另一个列表中是否存在匹配项(请参见list.contains()),然后删除不匹配的对象

  • 遍历
    FormBean
    列表
  • 如果人员列表包含来自实际FormBean的人员名称,则
  • 将此FormBean存储在单独的列表中,该列表包含所有应删除的FormBean
  • 最后,遍历此待删除列表,并从原始FormBeans集合中删除此列表中的FormBeans
  • 另类

    将所有符合条件(PersonList包含person)的FormBean复制到新集合,然后删除旧集合并使用新集合。

    使用

    确保
    FormBean
    实现
    .equals(Object o)
    ,以便它返回
    FormBean.person.equals(o)
    ,其中
    o
    是人名的字符串

    class FormBean {
        String person;
        int SSN;
        String phoneNumber;
    
        public boolean Equals(Object o) {
            if (o instanceof String) {
                return this.person.equals(o); // Case sensitive
            } else if (o instanceof FormBean) {
                return this.equals(((FormBeans)o).person);
            }
            return false;
        }
    }
    

    您的移除循环应该如下所示:

    for (Iterator<FormBean> iterator = objects.iterator(); iterator.hasNext();) {
        FormBean bean = iterator.next();
        if (!persons.contains(bean.getPerson())) {
            iterator.remove();
        }
    }
    
    for(Iterator Iterator=objects.Iterator();Iterator.hasNext();){
    FormBean=iterator.next();
    如果(!persons.contains(bean.getPerson())){
    iterator.remove();
    }
    }
    

    确保在FormBean中实现了
    equals

    是的,有。写一些代码。另外,不要使用原始集合;使用仿制药。啊,谢谢?我搞不懂密码,这就是我问的原因。我认为这是一个可以做到这一点的地方。如果将
    persons
    a
    HashSet
    而不是
    ArrayList
    ,您通常会获得更好的性能。我非常同意@MarkPeters的观点,使用交叉引用数组列表,您可能会面临一些非常糟糕的运行时间。更不用说从中删除元素了。如果您提供了equals的自定义实现,请确保重写
    equals
    方法。如果一个
    FormBean
    与另一个
    FormBean
    具有相同的名称,那么它就等于另一个
    FormBean
    ?SSN和电话号码呢?不,请不要这样做!不要为此滥用
    equals
    。如果您现在使用
    FormBean
    instances hashmaps/-set或任何依赖于equals/hashcode契约的东西,您将陷入深深的麻烦。