Я столкнулся с ситуацией, аналогичной описанной ниже в моем проекте, из-за которой я не могу реализовать код.
У меня есть класс POJO
public class TranObject {
public String loadId;
public String vDate;
public String dDate;
public String pDate;
public TranObject(String loadId, String vDate, String dDate, String pDate) {
super();
this.loadId = loadId;
this.vDate = vDate;
this.dDate = dDate;
this.pDate = pDate;
}
//Getter and Setters
//toString()
}
Теперь у меня есть другой класс процессора, в котором я хочу реализовать некоторое сравнение между объектами перегрузки, которые я получаю через вызов службы данных, и собирать их в другой коллекция. Лог реализации c приведен в комментариях ниже. Пожалуйста, прочитайте комментарии ниже
import java.util.Arrays;
import java.util.List;
public class DemoClass {
public static void main(String[] args) {
List<TranObject> listObj = Arrays.asList(
new TranObject("LOAD1", "20180102", "20180202", null),
new TranObject("LOAD2", "20180402", "20180403", null),
new TranObject("LOAD3", "20180102", "20180202", "20190302"),
new TranObject("LOAD4", "20180402", "20180403", null),
new TranObject("LOAD5", "20200202", "20200203", null)
);
/*
IF (obj1, obj3 vdate and dDate are equal)
IF(pDate == null for obj1 or obj3)
THEN obj1 and obj3 are equal/duplicates, and we collect them.
ELSE IF(pDate != null for obj1 and obj3)
IF(pDate is same for obj1 and obj3)
THEN obj1 and obj3 are duplicates, and we collect them.
ELSE
THEN obj1 and obj3 are unique.
*/
}
}
Мой конечный результат должен представлять собой коллекцию типа List, содержащую дубликаты объектов Tran, для дальнейшего обновления.
Я искал inte rnet, чтобы узнать, как чтобы решить это с помощью Lambda API. -> Попробовал сначала использовать groupingBy с vDate, а затем с dDate, но потом я не смог сравнить их на равенство pDate.
Может кто-нибудь помочь мне решить эту проблему. Небольшая помощь будет очень полезна для меня. Я застрял здесь
ОБНОВЛЕНИЕ: После некоторого чтения я пытаюсь реализовать то же самое путем переопределения метода equals в классе POJO, как показано ниже:
@Override
public boolean equals(Object obj) {
boolean isEqual=false;
if(obj!=null) {
TranObject tran = (TranObject) obj;
isEqual=(this.vDate.equals(tran.getvDate()) && this.dDate.equals(tran.getdDate()));
if(isEqual && this.pDate != null && tran.getpDate()!= null) {
isEqual = (this.pDate.equals(tran.getpDate()));
}
}
return isEqual;
}
Тем не менее это не работает, как ожидалось ... Может кто-нибудь, пожалуйста, помогите мне, почему ??