Hen*_*rik 2 java equality guava
我有两个Foo系列.我无法改变Foo的实现,而Foo的equals函数实现不正确.我也不能继承Foo.我做自定义相等功能:我已经使用guava的Predicate函数实现了.为了给你一个想法,实现看起来有点像这样.
new Predicate<Pair<Foo, Foo>>() {
@Override
public boolean apply(@Nullable Pair<Foo, Foo> input) {
Foo one = input.getFirst();
Foo two = input.getSecond();
return Objects.equals(one.getId(), two.getId());
}
};
Run Code Online (Sandbox Code Playgroud)
现在我需要检查我的两个Foo集合是否包含忽略订单的相同项目
我正在寻找使用此自定义相等功能执行此操作的最佳方法.
您可以将您的类包装在Guava中Equivalence并将其存储在Sets中.
Equivalence<Foo> eq = new Equivalence<Foo>{
// implement equals and hashcode
};
Set<Equivalence<Foo>> set1 = new HashSet<>();
set1.add(eq.wrap(someFoo));
Run Code Online (Sandbox Code Playgroud)
这样你就可以做双向containsAll()或做
Sets.difference(set1, set2).isEmpty()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1034 次 |
| 最近记录: |