首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否从基于自定义类的列表中删除重复元素(哈希集解决方案不起作用)?

是否从基于自定义类的列表中删除重复元素(哈希集解决方案不起作用)?
EN

Stack Overflow用户
提问于 2015-03-18 00:55:58
回答 1查看 354关注 0票数 0

我有一个自定义列表,其中包含带有姓名和电话号码的类对象。现在的问题是有太多的重复项。我需要删除基于电话号码的所有重复项。

当我尝试这种方法时:

代码语言:javascript
运行
复制
     list = getContacts();
    list = new ArrayList<ModelContact>(new LinkedHashSet<ModelContact>(list));
    listView.setAdapter(new ContactsAdapter(this, list));  

ModelContact.java

代码语言:javascript
运行
复制
        public class ModelContact {
            private String name;
            private String ContactNumber;
            private Bitmap imageUri;
            private String _id;
            public ModelContact() {
            }

            public Bitmap getImageUri() {
                return imageUri;
            }

            public void setImageUri(Bitmap imageUri) {
                this.imageUri = imageUri;
            }

            public String get_id() {
                return _id;
            }

            public void set_id(String _id) {
                this._id = _id;
            }



            public String getContactNumber() {
                return ContactNumber;
            }

            public void setContactNumber(String contactNumber) {
                ContactNumber = contactNumber;
            }

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }
         @Override
     public boolean equals(Object obj) {
    // TODO Auto-generated method stub
    if (obj instanceof ModelContact) {
        ModelContact temp = (ModelContact) obj;
        if (this.ContactNumber == temp.ContactNumber)
            return true;
    }
    return false;

}

 @Override
  public int hashCode() {
    // TODO Auto-generated method stub

    return (this.ContactNumber.hashCode());
}


        }

ContactsList:

代码语言:javascript
运行
复制
  public class ContactsList extends ActionBarActivity {
        private ListView listView;
        ProgressBar progressBar;
        List<ModelContact> list;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.list_contacts);
            listView = (ListView) findViewById(R.id.contacts_list);
            progressBar = (ProgressBar) findViewById(R.id.progressBar);
            list = new ArrayList<>();
            list = getContacts();
            list = new ArrayList<ModelContact>(new LinkedHashSet<ModelContact>(list));
            listView.setAdapter(new ContactsAdapter(this, list));
        }

                private List<ModelContact> getContacts() {

                    ContentResolver cr = getContentResolver();
                    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
                            null, null, null, null);
                    List<ModelContact> modelContacts = new ArrayList<>();
                    if (cur.getCount() > 0) {
                        ModelContact obj = new ModelContact();
                        while (cur.moveToNext()) {
                            String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                            String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                            if (Integer.parseInt(cur.getString(
                                    cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                                Cursor pCur = cr.query(
                                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                        null,
                                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                                        new String[]{id}, null);
                                while (pCur.moveToNext()) {
                                    String phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                                    Bitmap bmp = retrieveContactPhoto(id);
                                    if (bmp == null) {
                                        System.out.println(name + "is \t null");
                                    } else {
                                        Toast.makeText(this, "not null \t" + phoneNo, Toast.LENGTH_SHORT).show();
                                    }
                                    String imagecon = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                                    obj.set_id(id);
                                    obj.setName(name);
                                    obj.setContactNumber(phoneNo);
                                    obj.setImageUri(bmp);
                                    modelContacts.add(obj);
                                    System.out.println("Name: " + name + ", Phone No: " + phoneNo);
                                    //Toast.makeText(NativeContentProvider.this, "Name: " + name + ", Phone No: " + phoneNo, Toast.LENGTH_SHORT).show();
                                }
                                pCur.close();
                            }
                        }
                    }
                    System.out.print("Size:::" + modelContacts.size());

                    return modelContacts;
                }

        private Bitmap retrieveContactPhoto(String contactID) {

            Bitmap photo = null;

            try {
                InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(getContentResolver(),
                        ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, new Long(contactID)));

                if (inputStream != null) {
                    photo = BitmapFactory.decodeStream(inputStream);
                    return photo;
                }

                if (inputStream != null)
                    inputStream.close();

            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
            return null;
        }


    }
EN

回答 1

Stack Overflow用户

发布于 2015-03-18 01:08:26

首先,您需要覆盖ModelContact类中的equals和hashcode方法。在重写equals和hashcode方法时,您需要注意电话号码。

然后,您可以使用以下代码删除重复的元素

代码语言:javascript
运行
复制
list = new ArrayList<ModelContact>(new LinkedHashSet<ModelContact>(list))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29105125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档