java - 对象列表与字符串值比较

标签 java hudson

我期望以下内容返回 true。

   public class HudsonJob {

     private String name;
     private String status;
     public String getName() {
      return name;
     }
     public void setName(String name) {
      this.name = name;
     }
     public String getStatus() {
      return status;
     }
     public void setStatus(String status) {
      this.status = status;
     }

     public boolean equals(Object jobName) {
      return name.toLowerCase().equals(((String)jobName).toLowerCase());
     }

     public int hashCode() {
      return name.hashCode();
     }
    }

List<HudsonJob> existingJbsLst = hudsonUtil.getAllJobs(); // returns multiple HudsonJob objects in the list.

我期望返回 true 的语句是:

boolean isExistingJob=existingJbsLst.contains("AnExistingJOB"); 总是返回 false。

boolean isExistingJob = ExistingJbsLst.equals("AnExistingJOB"); 也返回 false。

我应该在代码中添加/更改什么才能获得预期的返回值。

最佳答案

你刹车the contract对于 equals 方法。例如:
它是对称的:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
在您的情况下, job.equals(string) 可能为 true,但 string.equals(job) 将始终为 false。

列表中可能发生的情况是元素以另一种方式进行比较:

for (Object el : list) {
    if (parameter.equals(el)) {
        ...
    }
}

这就是它不起作用的技术原因:"AnExistingJOB".equals(jobObject) 始终为 false。

编辑
顺便说一句,您的 hashCode 方法也是错误的。如果在 equals 方法中比较时忽略大小写,那么在 hashCode 中也忽略它。 Bozho 的建议可能是个好建议:IDE 会更好地生成这些方法。此外,您还可以检查 Andreas_D 的答案以了解有效的实现。

关于java - 对象列表与字符串值比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3863930/

相关文章:

Java JSpinner.DateEditor 使用 TimeZone March 时钟更改

java - 包属性未检测到 Log4j2 (2.1) 自定义插件

ruby-on-rails - Ruby on Rails Web 应用程序的最佳 CI 服务器是什么?

java - Jenkins 使用什么密码加密?

c# - 我如何以及为什么要设置 C# 构建机器?

continuous-integration - 在jenkins构建结果页面中显示工件

java - 错误: If a primary key is annotated with autoGenerate,其类型必须是int、Integer、long或Long

java - 如何混合该方法以便显示所有因素?我还缺少一个因素

java - 使用泛型时遇到类型安全警告

Jenkins 墙展示 404