【发布时间】:2019-10-11 12:33:58
【问题描述】:
我有两个 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;
}
以下是我尝试进行比较的带有 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 类中实现可比较的接口) 但是我无法使用如下的 compareTo 方法来比较两个列表
具有类似接口的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?
}
}
【问题讨论】: