Объединение дублированных объектов (POJO) в ArrayList и создание третьего и нового Object Java - PullRequest
0 голосов
/ 13 марта 2012

У меня есть ArrayList. В этом массиве будут дубликаты объектов. Дубликат находится в поле «firstId». Там будет еще одно поле, но это не будет использоваться для сравнения равенства объектов. Когда я найду дубликат, мне нужно объединить информацию из обоих и заполнить другой объект тремя полями.

Это то, что я хотел бы сделать

ClassA
{
private string firstId;
private String secondId;

//equals() and hashcode() override code for firstId;
}

ClassB
{
private string firstId;
private String secondId;
private string thirdID;
}


Class A cls1A = new ClassA();
Class A cls2A = new ClassA();

ClassB clsB = new ClassB();


if(cls1A.equals(cls2A))
{
clsB.setFirstId(cls1A.getFirstId());
clsB.setSecondId(cls1A.getSecondId());
clsB.setThirdId(cls2A.getSecondID());
}

Я написал довольно много кода, чтобы идентифицировать дубликаты (в основном, пытаясь добавить его в хэш-набор, а затем снова получить его как от объекта arraylist, так и от объекта hashset, сопоставляя каждый из них и пытаясь создать третий объект. Но есть Есть несколько ошибок, и это делает мою программу очень медленной. Есть лучшее решение для этого?

1 Ответ

0 голосов
/ 13 марта 2012

Вы действительно хотите простой способ группировки объектов с одинаковым значением firstId. Два возможных подхода:

  1. Сортируйте ваш ArrayList (используя Comparator , который смотрит только на firstId), затем итерируйте отсортированный список, сохраняя ссылку на последний найденный элемент. Если последний элемент и текущий элемент совпадают в firstId, создайте новый ClassB.

  2. Вместо HashSet используйте HashMap с ключом String и настройкой значений. Итерируйте ArrayList, сохраняя в нем отображение значений firstId на все значения secondId, которые вы найдете с этим firstId.

...