【问题标题】:Specific compare/equals for List.contains(obj)List.contains(obj) 的特定比较/等于
【发布时间】:2016-10-22 22:03:25
【问题描述】:

大家好,谢谢,

我目前想知道是否有适合我情况的最佳实践。

  • 假设你有一个对象。假设是 Customer 类型的对象。
  • 在客户对象中,您有 (n-1) 个字段。
  • 现在你正在通过 Eclipse 上下文菜单 >> 源 >> 生成 hashCode() 和 equals() 实现 hashCode 和 equals 方法... 它使用所有 (n-1) 个字段来执行此操作。在一般情况下,这实际上并不是一件坏事。

在特定方法中的单独服务类中,您有一个客户列表 >> 列出 myCustomers。

在此方法中,您使用条件 myCustomers.contains(specificCustomer) 实现 if-else 案例。

if (myCustomer.contains(specificCustomer)) {
   // todo
} else {
   // todo
}

所以 list.contains(obj) 在内部使用了对象的 equals 方法。这是检查列表是否包含对象的一般方法。

但是 在我的情况下,我已经使用所有(n-1)字段实现了标准的 hashCode 和 equals。而我想要的是使用一个/.contains(obj) 方法,它只检查对象的特定字段,例如 (n-5) 个字段。

我不想修改现有的 hashCode 和 equals,因为代码的其他部分已经在使用它。如果我这样做,我无法预测之后的行为。

我也不想在 Customer 类中编写单独的方法,并且只在 if-else-condition 中使用它。

那么,有没有人有想法、最佳实践或很好的模式来完成这项工作?

【问题讨论】:

  • 尽量不要搜索最佳实践,它们通常是基于意见的
  • 我的基于意见的解决方案:创建使用 N-5 个字段的方法 equalsXXX,创建一个迭代列表并使用 equalsXXX 方法检查相等性的方法

标签: java collections equals contains


【解决方案1】:

您希望使用特定的业务逻辑(n-5 字段等于),因此您必须在某处编写特定的代码。想到的最简单的方法是将标准的contains 调用替换为自定义方法,该方法遍历列表并使用自定义等于逻辑检查是否有匹配的项目。如果您在更多地方需要此版本的 equals,您可以将其提取到单独的实用程序或服务类中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 2013-05-16
    • 2022-07-02
    • 2020-05-15
    • 2015-03-22
    • 1970-01-01
    相关资源
    最近更新 更多