更具体地说,我想要一个接口来比较对象,这些对象只能进行相等性比较[例如复数],但不能对它们进行总排序.它应该[注意它只返回一个布尔值是/否]
boolean Equals(T object1, T object2);
Run Code Online (Sandbox Code Playgroud)
和哈希码函数.因此,当我使用对象分配它们来收集"相等"对象时,2个"相等"对象不会在两个不同的桶中结束.
int getHashCode(T object);
Run Code Online (Sandbox Code Playgroud)
Java有一个吗?我搜索过,找不到它.
我试图在Hadoop Map Reduce中使用它来将"相等"对象分发到同一个reduce作业,这样我就可以操作所有"相等"的对象.我只关心对象是否相等而且不需要总订单.但是如果两个对象相等,则它们应该具有相同的哈希码.否则他们将最终完成两个不同的减少工作.
请注意,我知道对象的equals和hashcode.但我想要一个外部比较器,它只取决于对象的一部分.因此,对象的平等概念与我的不同.
Jon*_*eet 10
在Java中没有用于此的内置类型.这是IMO系列设计中的"漏洞".我担心的是特定于字符串的Collator类,它的范围非常接近.
没有办法自定义内置映射以使用特定类型的相等比较,运气更糟.想要这个功能是完全合理的,而且真正的痛苦还没有出现.
您当然可以创建自己的这样的界面,并编写自己的地图变体使用它...但必须这样做很糟糕:(
你想要的类型是番石榴Equivalence.但是,您可能会感到失望,就像在Java中一样Collection,Map并且相当严格地指定Object.equals,并且您将找不到使用备用等效的Guava中的实现.但是,您可以模拟该行为myEquivalence.wrap(myObject).
| 归档时间: |
|
| 查看次数: |
2092 次 |
| 最近记录: |