从填充了POJO的ArrayList中删除重复项

时间:2013-07-30 07:22:21

标签: java

我有一个填充了ArrayList的POJO,我想删除所有具有重复变量的POJO。这是POJO:

public static class UrlStore {

    public String url;
    public String data;

    public UrlStore(String url) {
        this.url = url;
    }

    public void setData(String data) {
        this.data = data;
    }
}   

我在ArrayList<UrlStore>中删除重复的“url”变量的方法是遍历列表并删除这些重复项。有人告诉我,我可以简单地使用Set来执行此操作,但我无法弄清楚如何将其与包含POJO的ArrayList一起使用。或者你有更好的方法吗?

感谢您的任何建议!

4 个答案:

答案 0 :(得分:9)

您可以覆盖POJO中的equals()hashCode()方法,并将List<UrlStore>传递给Set

 List<UrlStore> listOfUrlStore = ......
 Set<UrlStore> foo = new HashSet<UrlStore>(listOfUrlStore);

我在这里使用了一个简单的HashSetSet的正确实现取决于您的要求。您甚至可以将Set转换回List

 listOfUrlStore.clear();
 listOfUrlStore.addAll(foo);   

答案 1 :(得分:4)

package test.urlstore;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;


public class DuplicateDemo{

    public static void main(String[] args) throws Exception {
        List<UrlStore> urlStores = new ArrayList<UrlStore>();
        UrlStore usg = new UrlStore("google");
        UrlStore usy = new UrlStore("yahoo");
        UrlStore usb = new UrlStore("bing");
        UrlStore usa = new UrlStore("ask");
        UrlStore usd = new UrlStore("duckduckgo");


        usg.setData("mail");
        urlStores.add(usg);
        usg = new UrlStore("google");
        usg.setData("search");
        urlStores.add(usg);
        usg = new UrlStore("google");
        usg.setData("doc");
        urlStores.add(usg);
        usg = new UrlStore("google");
        usg.setData("search");
        urlStores.add(usg);
        usg = new UrlStore("google");
        usy.setData("search");
        urlStores.add(usy);
        usy.setData("search");
        urlStores.add(usy);
        usb.setData("search");
        urlStores.add(usb);
        usb.setData("search");
        urlStores.add(usb);
        usa.setData("search");
        urlStores.add(usa);
        usd.setData("search");
        urlStores.add(usd);

        System.out.println("before removing duplicates");
        // before removing duplicates
        for (Iterator iterator = urlStores.iterator(); iterator.hasNext();) {
            UrlStore urlStore = (UrlStore) iterator.next();
            System.out.println(urlStore.toString());
        }

        System.out.println("\n\nafter removing duplicates");
        //removing duplicates
         Set<UrlStore> uniqueUrlStores = new HashSet<UrlStore>(urlStores);

         //After removing duplicates
         for (Iterator iterator = uniqueUrlStores.iterator(); iterator.hasNext();) {
            UrlStore urlStore = (UrlStore) iterator.next();
            System.out.println(urlStore.toString());

        }

    }



    static class UrlStore {

        public String url;
        public String data;

        public UrlStore(String url) {
            this.url = url;
        }

        public void setData(String data) {
            this.data = data;
        }

        @Override
        public String toString() {
            return "UrlStore [url=" + url + ", data=" + data + "]";
        }

        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((data == null) ? 0 : data.hashCode());
            result = prime * result + ((url == null) ? 0 : url.hashCode());
            return result;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            UrlStore other = (UrlStore) obj;
            if (data == null) {
                if (other.data != null)
                    return false;
            } else if (!data.equals(other.data))
                return false;
            if (url == null) {
                if (other.url != null)
                    return false;
            } else if (!url.equals(other.url))
                return false;
            return true;
        }


    }   
}

答案 2 :(得分:2)

在POJO中覆盖hashCode()和equals(),然后:

List<URLStore>() list = //Your list;
Set<URLStore> set =new HashSet<URLStore>(list);

答案 3 :(得分:1)

不要忘记覆盖POJO的equals方法。 完成此操作后,您可以使用contains List方法检查对象是否在列表中,然后再添加它。
对于Set,您不必使用 列表,替换列表。您可以使用Set

填充List中的addAll(Collection c)