我必须错过Equivalence.wrap()
的一些东西,但是下面的测试对我来说是失败的 - 只在最后一行使用番石榴18.0。为什么?我究竟做错了什么?我的目标是通过将等效对象添加到一个集合中来删除等效对象。如何使用Equivalence.wrap()来重复数据删除?
@Test
public void testEquivalenceWrap()
{
final Equivalence<Program2> eq = EquivalentIfIDsEven.INSTANCE;
Program2 p1 = new Program2();
p1.setId(2L);
Program2 p2 = new Program2();
p2.setId(4L);
//sanity-test equivalence impl
assertFalse(p1.equals(p2));
assertTrue(eq.equivalent(p1, p2));
assertTrue(eq.wrap(p1).equals(eq.wrap(p2)));
//dedupe in set
final Set<Equivalence.Wrapper<Program2>> set = new HashSet<>();
set.add(eq.wrap(p1));
set.add(eq.wrap(p2));
assertEquals(1, set.size()); //FAIL: size == 2
}
你是正确的!我的'Equivalence.doHash()'impl不满足可分配的属性。即'doHash(p1)!= doHash(p2)' - 不正确。 – Nikita 2014-12-03 18:50:19