Как получить уникальные строки с помощью класса SET из Arraylist из "Arraylist string objects" класса Type Setters & Getters
Мне нужна ваша помощь в Java-коде, например, как я могу получить уникальные записи из массива, который является многомерным массивом приведения класса объектов Value (сеттеров и геттеров).
Я читаю таблицу и помещаю все записи в список авторов. "Таблица" будет иметь всю таблицу, скажем, 3 столбца 25 строк, в которых некоторые номера материалов являются уникальными, а некоторые дублируются. Я хотел избавиться от дубликатов строк с номерами материалов и ТОЛЬКО получить уникальный номер строк материалов.
ArrayList<EssVO> recordInstance = new ArrayList<EssVO>();
EssVO ESSvorecord = new EssVO();
for (int i = 0; i < table.getNumRows(); i++){
table.setRow(i);
ESSvorecord = new EssVO();
ESSvorecord.setCONTRACT_NUMBER(table.getString("CONTRACT_NUMBER"));
ESSvorecord.setCONTRACT_LINE_ITEM(table.getString("CONTRACT_LINE_ITEM"));
ESSvorecord.setMATERIAL_NUMBER(table.getString("MATERIAL_NUMBER"));
recordInstance.add(ESSvorecord);
}
//Display
Iterator<EssVO> itrForSubs = recordInstance.iterator();
while(itrForSubs.hasNext()){
ESSvorecord = itrForSubs.next();
ESSvorecord.getCONTRACT_NUMBER();
ESSvorecord.getCONTRACT_LINE_ITEM();
ESSvorecord.getMATERIAL_NUMBER();
}
Ценю ваш вклад и помощь.
Спасибо Радж
3 ответа
Для этого вы можете использовать цикл foreach для Java5.
for (EssVO essVO : set)
{
System.out.println(essVO);
}
Вам необходимо использовать интерфейс Comparator, который позволяет сравнивать несколько ключей - при условии, что у вас более 1 ключа
Если они возвращают значение, равное 0, вы можете исключить добавление их в список.
Как реализовать Comparator
Вы можете добавить список в java.util.Set (используя LinkedHashSet в моем примере), который будет содержать только уникальный объект. "Уникальный" определяется методами (hashCode() и equals ()), реализованными в вашем объекте, который вы помещаете в List и Set. После того, как вы реализовали методы hashCode () и equals (), вы можете просто поместить List в Set, который будет содержать только уникальные записи, основанные на equals () и hashCode().
Вот мой пример кода для hashCode () и equals () EssVO:
@Override
public int hashCode() {
return this.number.hashCode();
}
@Override
public boolean equals(Object obj) {
if(EssVO.class.isInstance(obj))
{
EssVO essVO = (EssVO)obj;
if(this.number.equals(essVO.getNumber()))
{
return true;
}
}
return false;
}
List<EssVO> list = new ArrayList<EssVO>(2);
list.add(new EssVO("A1", "A1 Name", "This A1 Name"));
list.add(new EssVO("A2", "A2 Name", "This A2 Name"));
list.add(new EssVO("A3", "A3 Name", "This A3 Name"));
list.add(new EssVO("B1", "B1 Name", "This B1 Name"));
list.add(new EssVO("B2", "B2 Name", "This B2 Name"));
list.add(new EssVO("A2", "A2 Name", "This A2 Name"));
list.add(new EssVO("A3", "A3 Name", "This A3 Name"));
list.add(new EssVO("C1", "C1 Name", "This C1 Name"));
list.add(new EssVO("B2", "B2 Name", "This B2 Name"));
Set<EssVO> set = new LinkedHashSet<EssVO>();
set.addAll(list);