【发布时间】:2015-04-02 09:48:28
【问题描述】:
如果我可以说明这些元素类型之间的一对一关系,我正在寻找一种方法来判断两组不同的元素类型是否相同。在 java 或 guava 或 apache commons 中是否有标准的方法来执行此操作?
这是我自己对这个任务的实现。例如,我有两个我知道如何比较的元素类。为简单起见,我按 id 字段比较它们:
class ValueObject {
public int id;
public ValueObject(int id) { this.id=id; }
public static ValueObject of(int id) { return new ValueObject(id); }
}
class DTO {
public int id;
public DTO(int id) { this.id=id; }
public static DTO of(int id) { return new DTO(id); }
}
然后我定义一个进行比较的接口
interface TwoTypesComparator<L,R> {
boolean areIdentical(L left, R right);
}
比较集合的实际方法是这样的
public static <L,R> boolean areIdentical(Set<L> left, Set<R> right, TwoTypesComparator<L,R> comparator) {
if (left.size() != right.size()) return false;
boolean found;
for (L l : left) {
found = false;
for (R r : right) {
if (comparator.areIdentical(l, r)) {
found = true; break;
}
}
if (!found) return false;
}
return true;
}
客户端代码示例
HashSet<ValueObject> valueObjects = new HashSet<ValueObject>();
valueObjects.add(ValueObject.of(1));
valueObjects.add(ValueObject.of(2));
valueObjects.add(ValueObject.of(3));
HashSet<DTO> dtos = new HashSet<DTO>();
dtos.add(DTO.of(1));
dtos.add(DTO.of(2));
dtos.add(DTO.of(34));
System.out.println(areIdentical(valueObjects, dtos, new TwoTypesComparator<ValueObject, DTO>() {
@Override
public boolean areIdentical(ValueObject left, DTO right) {
return left.id == right.id;
}
}));
我正在寻找该任务的标准解决方案。或者欢迎提出任何改进此代码的建议。
【问题讨论】:
标签: java guava apache-commons