Надеюсь, ты сможешь мне помочь.Я постараюсь прояснить название вопроса.У меня есть один POJO, подобный этому
public class Factor {
private int id;
private String item;
private int unitId;
private Double factor;
// constructor getters and setters
}
У меня есть два List
этого класса с данными из двух разных таблиц в двух разных БД.
Метод equals
определяется следующим образом
import com.google.common.base.Objects;
//....
@Override
public boolean equals( Object o ) {
if ( this == o )
return true;
if ( o == null || getClass() != o.getClass() )
return false;
Factor that = (Factor) o;
return getUnitId() == that.getUnitId() &&
Objects.equal(getItem(), that.getItem());
}
, поэтому два объекта считаются равными, если они имеют одинаковые атрибуты item
и unitId
.
Допустим, у меня есть два списка:
List<Factor> listA = new ArrayList<>();
listA.add(new Factor(1, "Item1", 1, 0.5));
listA.add(new Factor(2, "Item1", 2, 0.6));
listA.add(new Factor(3, "Item2", 1, 1.0));
listA.add(new Factor(4, "Item3", 1, 2.0));
List<Factor> listB = new ArrayList<>();
listB.add(new Factor(0, "Item1", 1, 0.8));
listB.add(new Factor(0, "Item1", 2, 0.9));
listB.add(new Factor(0, "Item4", 1, 1.0));
listB.add(new Factor(0, "Item5", 1, 2.0));
Принимая во внимание метод equals
, первые два элемента списков следует считать равными.
Причина, по которой ids
в списке B все 0
, потому что в этой таблице нет поля id
.
Я пытаюсь создать новый список, объединив эти два списка, но еслиобъекты равны, это должно взять id
из listA
и коэффициент из listB
.
Таким образом, список результатов будет иметь следующие объекты
(1, "Item1", 1, 0.8)
(2, "Item1", 2, 0.9)
(0, "Item4", 1, 1.0)
(0, "Item5", 1, 2.0)
Я знаю, как сравнить оба списка с stream
и отфильтровать, какие объекты равны или различны, но кто-нибудь знает, как получить новый объект, объединяющий равные?