У меня есть два объекта DTO, такие как следующие, пожалуйста, обратите внимание, что я использую lombok, чтобы избежать шаблонного кода.
DtoA
import lombok.Data;
import java.util.List;
@Data
public class DtoA {
private String name;
private String number;
private List<String> aList;
}
DtoB
import lombok.Data;
import java.util.List;
@Data
public class DtoB {
private String name;
private String phone;
private List<String> bList;
}
Я хочу сравнить конкретные поля обоих объектов, поэтому я создал объект типа адаптера, например:
DtoAdapter
import lombok.Data;
import java.util.List;
@Data
public class DtoAdapter {
private String nameText;
private List<String> xList;
}
Ниже приведен мой класс Test с методом main, в котором я пытаюсь выполнитьсравнение Это сравнение не удается, поскольку aList и bList содержат строки в разных порядках. Я хочу сравнить содержимое списка, не беспокоясь об их порядке.
Тест
import junit.framework.Assert;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
DtoA a = new DtoA();
List<String> aList = new ArrayList<>();
aList.add("x"); aList.add("y"); aList.add("z");
a.setName("abc"); a.setNumber("123"); a.setAList(aList);
DtoB b = new DtoB();
List<String> bList = new ArrayList<>();
bList.add("z"); bList.add("x"); bList.add("y");
b.setName("abc"); b.setPhone("123"); b.setBList(bList);
DtoAdapter a1 = new DtoAdapter();
a1.setNameText(a.getName()); a1.setXList(a.getAList());
DtoAdapter b1 = new DtoAdapter();
b1.setNameText(b.getName()); b1.setXList(b.getBList());
// comparision failing because of lists contains string in different orders
Assert.assertEquals(a1, b1);
}
}
Примечание. Я попытался написать CompareTo (реализуя сопоставимый интерфейс в классе DtoAdapter), но я не смогне пишите сравнение двух списков с методом сравнения, как показано ниже
DtoAdapter с сопоставимым интерфейсом
import lombok.Data;
import java.util.List;
@Data
public class DtoAdapter implements Comparable<DtoAdapter>{
private String nameText;
private List<String> xList;
@Override
public int compareTo(DtoAdapter o) {
return this.getNameText().compareTo(o.getNameText());
// how to compare this.getXList() and o.getXList() with compareTo?
}
}