0

我有两个数据类型类的通用列表: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());
    }

我想将 requiredList 的元素与 primaryList 的元素进行比较。那些 primaryList 的元素不在 requiredList 中,它们将被添加到新列表中。有人可以帮我吗?

4

3 回答 3

2

首先,您需要为数据实现equals()hashcode()

然后

List<Data> newlist = new ArrayList<Data>();
for(Data data : primaryList ) {
   if(!requiredList.contains(data) ) {
       newlist.add(data);
   }
 } 
于 2012-12-14T05:27:29.280 回答
0

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

查看列表 removeAll()retainAll()方法在您的用例中是否有用。

于 2012-12-14T05:44:25.557 回答
0

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

primaryList.removeAll(requiredList);

正如@Subin S 指出的那样equalshashCode需要为Data.

于 2012-12-14T05:32:32.923 回答