List.contains(obj)

时间:2016-06-21 11:20:40

标签: java collections equals contains

嗨@ all and thx提前,

我目前想知道我的情况是否有一个很好的最佳实践。

  • 考虑你有一个对象。让我们说一个Customer类型的对象。
  • 在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方法。这是检查列表是否包含对象的一般方法。

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

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

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

那么,有没有人有想法,最佳实践或伟大模式来完成这项工作?

1 个答案:

答案 0 :(得分:0)

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