У меня есть ArrayList<CustomObject>
как ArrayList<Names>
в моем проекте. Имена POJO содержит имя и изображение поля следующим образом:Как удалить значение дубликатов из ArrayList <CustomObject> в java
Names.java
public class Names {
private String name;
private String image;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public Names(String name, String image) {
this.name = name;
this.image = image;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return name;
}
}
Я добавляю значения поля следующим образом:
ArrayList<Names> menu = new ArrayList<Names>();
menu.add(new Names("chandru","image1"));
menu.add(new Names("vikki","image2"));
menu.add(new Names("karthick","image3"));
menu.add(new Names("chandru","image4"));
menu.add(new Names("karthick","image5"));
menu.add(new Names("chandru","image6"));
menu.add(new Names("karthick","image7"));
menu.add(new Names("vikki","image8"));
menu.add(new Names("karthick","image9"));
menu.add(new Names("harish","image10"));
menu.add(new Names("vivek","image11"));
menu.add(new Names("harish","image12"));
Мое требование:
Теперь все мое требование - удалить повторяющиеся имена, содержащиеся в Arra Мастер стилей. Я попробовал несколько методов, как удалить дубликаты следующим образом:
Метод I: Использование HashSet
Добавление значений в HashSet и назначая назад эти значения в new ArrayList<Names>
имени al
.
ArrayList<Names> al = new ArrayList<Names>();
Set<Names> hs = new HashSet<Names>();
hs.addAll(menu);
al.clear();
al.addAll(hs);
System.out.println(al);
Выход Метод I:
[karthick, vikki, karthick, karthick, chandru, vivek, vikki, chandru, harish, harish, karthick, chandru]
Ожидаемый результат будет:
Значения после удаления дубликатов:
[karthick, vikki,chandru, vivek, harish]
Я также разместить свой цельные CLAS s для вашей справки
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class Sample {
public static void main(String[] args) {
ArrayList<Names> menu = new ArrayList<Names>();
menu.add(new Names("chandru","image"));
menu.add(new Names("vikki","image"));
menu.add(new Names("karthick","image"));
menu.add(new Names("chandru","image"));
menu.add(new Names("karthick","image"));
menu.add(new Names("chandru","image"));
menu.add(new Names("karthick","image"));
menu.add(new Names("vikki","image"));
menu.add(new Names("karthick","image"));
menu.add(new Names("harish","image"));
menu.add(new Names("vivek","image"));
menu.add(new Names("harish","image"));
ArrayList<Names> al = new ArrayList<Names>();
Set<Names> hs = new HashSet<Names>();
hs.addAll(menu);
al.clear();
al.addAll(hs);
System.out.println(al);
}
}
Пожалуйста, помогите мне решить проблему, с которой я столкнулся, чтобы удалить дубликаты из списка. Любые предложения и решения были бы очень полезны для меня. Заранее спасибо.
Вы не переопределяют 'хэш-код()' и 'Equals()' в вашем классе 'Names'. – Eran
Если вы хотите, чтобы HashSet удалял дубликаты на основе 'name'' Names', то два экземпляра 'Names' с одинаковым именем должны быть равны. Но это не так, потому что вы не переопределили 'equals()' и 'hashCode()', чтобы это произошло. –
@JBNizet Я действительно не знаю, как это сделать. Можете ли вы опубликовать какой-то фрагмент кода? – Chandru