【问题标题】:Search an ArrayList with multiple fields using only one field from a different ArrayList仅使用来自不同 ArrayList 的一个字段搜索具有多个字段的 ArrayList
【发布时间】:2019-05-10 14:13:40
【问题描述】:

如果moviesAvailable 有一个ArrayList,并且列表采用titleyeargenreprice。如何使用ArrayListgenres 获取电影列表?

Movie 类中有一个 toString 方法可以打印出电影。当我运行代码时,if 语句之后的所有内容都不会运行,因为条件返回为 false。

【问题讨论】:

  • 你可以清楚的看到你调用的是Genre的equals方法,但是你没有覆盖它,所以你使用的是默认的,这是错误的。

标签: java object arraylist


【解决方案1】:

您需要在您的Genre 类中覆盖equals(),以便您可以相互比较该类的实例。

这是一个快速实现,可以轻松扩展以获得更多功能:

@Override
public boolean equals(Object o) {
    if (!(o instanceof Genre)) {
        return false;
    }
    return ((Genre) o).name.equals(this.name);
}

【讨论】:

  • 你的方法也不是空保存。 new Genre(null).equals(new Genre(null)) 抛出 NullPointerException。
  • @SamuelPhilipp "这是一个快速实现,可以轻松扩展以提供更多功能"
  • 此方法有效,这是解决问题的唯一方法还是我可以在代码中更改任何内容以使其正常工作?
  • @TDizzle 重写 equals() 方法正是您的代码所需要的。
【解决方案2】:

您需要重写 Genre 类中的 equals 方法以使 if 条件有效,请参见下面的代码

private String name;

Genre(String name){
    this.name = name;
}
public boolean hasType(String genre) {

    return genre.equals(this.name);
}

public boolean equals(Object o) {
   if (!(o instanceof Genre)) {
      return false;
   }
   return this.name.equals(((Genre)o).name);
}

【讨论】:

  • 更好的实现是:return (o instanceof Genre) ? ((Genre) o).name.equals(this.name) : false;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多