如何在java中比较两个通用列表的元素?

如何在java中比较两个通用列表的元素?,java,Java,我有两个数据类型类的通用列表:RequiredList和PrimaryList public class Data{ private String dataCode; private String dataDesc; public String getDataCode(){} public void setDataCode(String dataCode){} public String getData

我有两个数据类型类的通用列表:RequiredList和PrimaryList

   public class Data{
        private String dataCode;
        private String dataDesc; 

        public String getDataCode(){}

        public void setDataCode(String dataCode){}

        public String getDataDesc(){}

        public void setDataDesc(String dataDesc){}


        }

    public static void main(String[] args) {
        List<Data> primaryList = new ArrayList<Data>();
        for (int i = 2; i < 5; i++) {
            Data data = new Data();
            data.setDataCode("code" + i);
            data.setDataDesc("desc" + i);
            primaryList.add(data);
        }

        List<Data> requiredList = new ArrayList<Data>();
        for (int i = 0; i < 8; i++) {
            Data data = new Data();
            data.setDataCode("code" + i);
            data.setDataDesc("desc" + i);
            requiredList.add(data);

        }
        StringBuffer partyList = new StringBuffer();
        for (int i = 0; i < requiredList.size(); i++) {
            if (primaryList.size() > i
                    && !requiredList.get(i).getDataCode().equals(primaryList.get(i).getDataCode())) {
                partyList.append(requiredList.get(i).getDataDesc());
                partyList.append(",");

            }
            if(primaryList.size() <= i)
            {
                partyList.append(requiredList.get(i).getDataDesc());
                partyList.append(",");
            }           
        }
        System.out.println(partyList.toString());
    }
公共类数据{
私有字符串数据代码;
私有字符串dataDesc;
公共字符串getDataCode(){}
public void setDataCode(字符串dataCode){}
公共字符串getDataDesc(){}
public void setDataDesc(字符串dataDesc){}
}
公共静态void main(字符串[]args){
List primaryList=new ArrayList();
对于(int i=2;i<5;i++){
数据=新数据();
data.setDataCode(“代码”+i);
data.setDataDesc(“desc”+i);
添加(数据);
}
List requiredList=新建ArrayList();
对于(int i=0;i<8;i++){
数据=新数据();
data.setDataCode(“代码”+i);
data.setDataDesc(“desc”+i);
所需列表。添加(数据);
}
StringBuffer partyList=新的StringBuffer();
对于(int i=0;ii
&&!requiredList.get(i).getDataCode().equals(primaryList.get(i).getDataCode())){
append(requiredList.get(i.getDataDesc());
partyList.append(“,”);
}

if(primaryList.size()首先需要为数据实现
equals()
hashcode()

然后

List newlist=newarraylist();
用于(数据:primaryList){
如果(!requiredList.contains(数据)){
添加(数据);
}
} 

如果您同意修改primaryList,那么
removeAll
就可以了

primaryList.removeAll(requiredList);
正如@Subin S所指出的,
等于
hashCode
需要为
数据
重写

primaryList的那些元素不在requiredList中,它们 将添加到新列表中


查看
removeAll()
retainal()
方法在您的用例中很有用。

为什么不在
Data
类中重写
equals()
方法并调用它:requiredList.get(i).equalr(arr2.get(i));确保其大小为sameI已覆盖此方法,但我没有得到实际结果。我想验证requiredList中的primaryList。primary List可能为0大小1大小或更大。我必须仅显示primaryList中不存在的大小。或者您可以在org.apache.commons.collections.CollectionUtilswhy中使用减法您是否使用list.contains()来判断对象是否存在于列表中?您可能希望使用Set而不是list来存储这些元素。
primaryList.removeAll(requiredList);