Удалить повторяющиеся элементы в ArrayList моей модели

Если я хочу быть честным с вами, я не знаю, как работает какая-либо коллекция в android или java, но мой вопрос и моя цель, я хочу удалить повторяющийся элемент в ArrayList моей модели или моего класса это моя модель ниже:

public class PersonClass {

    private String ID;
    private String Name;
    private String Family;
    private String Nickname;
    private String Email;
    private String Mobile;
    private Date BirthDate;
    private boolean Admin;
    private boolean Gender;
    private String ThumbnailURL;

    public PersonClass() {
    }

    public PersonClass(String ID, String name, String family, String nickname, String email, String mobile, Date birthDate, boolean admin, boolean gender, String thumbnailURL) {
        this.ID = ID;
        Name = name;
        Family = family;
        Nickname = nickname;
        Email = email;
        Mobile = mobile;
        BirthDate = birthDate;
        Admin = admin;
        Gender = gender;
        ThumbnailURL = thumbnailURL;
    }

    public String getID() {
        return ID;
    }

    public void setID(String ID) {
        this.ID = ID;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getFamily() {
        return Family;
    }

    public void setFamily(String family) {
        Family = family;
    }

    public String getNickname() {
        return Nickname;
    }

    public void setNickname(String nickname) {
        Nickname = nickname;
    }

    public String getEmail() {
        return Email;
    }

    public void setEmail(String email) {
        Email = email;
    }

    public String getMobile() {
        return Mobile;
    }

    public void setMobile(String mobile) {
        Mobile = mobile;
    }

    public Date getBirthDate() {
        return BirthDate;
    }

    public void setBirthDate(Date birthDate) {
        BirthDate = birthDate;
    }

    public boolean isAdmin() {
        return Admin;
    }

    public void setAdmin(boolean admin) {
        Admin = admin;
    }

    public boolean isGender() {
        return Gender;
    }

    public void setGender(boolean gender) {
        Gender = gender;
    }


    public String getThumbnailURL() {
        return ThumbnailURL;
    }

    public void setThumbnailURL(String thumbnailURL) {
        ThumbnailURL = thumbnailURL;
    }

    public static void LogConsole(PersonClass Person) {
        Log.i(MyApplication.LOG_TAG, "ID  = " + Person.getID());
        Log.i(MyApplication.LOG_TAG, "Name :" + Person.getName());
        Log.i(MyApplication.LOG_TAG, "Family :" + Person.getFamily());
        Log.i(MyApplication.LOG_TAG, "Nickname :" + Person.getNickname());
        Log.i(MyApplication.LOG_TAG, "Email :" + Person.getEmail());
        Log.i(MyApplication.LOG_TAG, "Mobile :" + Person.getMobile());
        Log.i(MyApplication.LOG_TAG, "BirthDate :" + Person.getBirthDate());
        Log.i(MyApplication.LOG_TAG, "Admin :" + Person.isAdmin());
        Log.i(MyApplication.LOG_TAG, "Gender :" + Person.isGender());
        Log.i(MyApplication.LOG_TAG, "ThumbnailURL :" + Person.getThumbnailURL());
    }
}

и следует упомянуть, что я мог бы с помощью hashset и String Class удалить повторяющийся список массивов из списка массивов класса Person

AcceptList = WebService.MateList(AcceptRecordsJSONArray);
ArrayList<String> IDs1 = new ArrayList<>(AcceptList.size());
for (PersonClass person : AcceptList)
    IDs1.add(person.getID());
Log.e(MyApplication.LOG_TAG, "-------------------------------------IDs1(1)---------------------------------------");
for (String ID : IDs1)
    Log.i(MyApplication.LOG_TAG, "First time->ID = " + ID);
Log.e(MyApplication.LOG_TAG, "-------------------------------------IDs1(1)---------------------------------------");
Set<String> set = new LinkedHashSet<>(IDs1);
IDs1.clear();
IDs1.addAll(set);
Log.e(MyApplication.LOG_TAG, "-------------------------------------IDs1(2)---------------------------------------");
for (String ID : IDs1)
    Log.i(MyApplication.LOG_TAG, "Second time->ID = " + ID);
Log.e(MyApplication.LOG_TAG, "-------------------------------------IDs1(2)---------------------------------------");


Log.e(MyApplication.LOG_TAG, "-------------------------------------AcceptList(1)---------------------------------------");
for (PersonClass person : AcceptList)
    PersonClass.LogConsole(person);
Log.e(MyApplication.LOG_TAG, "-------------------------------------AcceptList(1)---------------------------------------");
ArrayList<PersonClass> AcceptList2 = removeDuplicates(AcceptList);
Log.e(MyApplication.LOG_TAG, "-------------------------------------AcceptList(2)---------------------------------------");
for (PersonClass person : AcceptList2)
    PersonClass.LogConsole(person);
Log.e(MyApplication.LOG_TAG, "-------------------------------------AcceptList(2)---------------------------------------");

Почему бы не использовать Set, если вам нужны только уникальные элементы. Или, если вы хотите удалить объект с каким-то повторяющимся свойством, просто используйте цикл? В чем твоя проблема? Пожалуйста, укажите

ADM 09.03.2018 16:37

Простите!!! Я любитель кодирования, и я знаю, что ответ на мой вопрос заключается в работе с компаратором или хеш-кодом и / или ... в классе, но я не знаю, реализую код, и я могу не справиться с этим ..

Super Man 09.03.2018 16:54

спасибо за ссылку, но я искал эту ссылку, но ...

Super Man 09.03.2018 16:56

@ADM Мой дорогой друг, спасибо тебе большое, ты очень милый для меня и юноши??? ??? ??? ??? ??? ???

Super Man 09.03.2018 20:44
1
5
2 712
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Удаление повторяющихся элементов из ArrayList объектов:

Во-первых, нам нужно переопределить методы equals() и hashcode() вашего PersonClass.

@Override
public boolean equals(Object obj) {
    if (obj == this) return true;

    if (!(obj instanceof Person)) {
        return false;
    }

    Person person = (Person) obj;

    return person.id.equals(id);
} 

@Override
public int hashCode() {
    return id;
}

Есть и другие лучшие способы сделать это в зависимости от реализации и использования вашего класса. Зацените их здесь.

Теперь, удалив повторяющиеся элементы, используйте HashSet или LinkedHashSet.

ArrayList<Person> duplicate = new ArrayList<Person>

duplicate.add(new Person())
... 
...
HashSet<Person> filter = new HashSet(duplicate);
ArrayList<Person> persons = new ArrayList<Person>(filter);

Большое спасибо, вы очень милы для меня и юношей, я надеюсь, что вы доберетесь до всего в вашей жизни !!! Благодарность!!! ??? ??? ??? ??? ??? ???

Super Man 09.03.2018 20:47

Другие вопросы по теме