【问题标题】:Filtering objects from a List [duplicate]从列表中过滤对象[重复]
【发布时间】:2016-04-18 18:56:40
【问题描述】:

现在我已经被这个问题困扰了一段时间,想知道是否有人可以提供帮助。我已经制作了一个 Java GUI(为最后一年的大学生提供的模块选择器),但我一点也做不了。

背景:添加新模块和课程应该很容易,所以我尽量避免硬编码。现在我要做的就是让程序根据课程导入某些模块。这是非常微不足道的,我可以让它以一种肮脏的方式工作,但不是我想要的方式。

if(course.getCourseName() == "Computer Science") {
        select.setModules(courses[0].getModulesOnCourse());
    } else if(course.getCourseName() == "Software Engineering") {
        select.setModules(courses[1].getModulesOnCourse());
    }

现在这种方式可行,但它是硬编码级别 1000。我希望它的工作方式是以下两种:

courses.forEach(c -> {if(c.equals(course)){select.setModules(c.getModulesOnCourse())}});

或

for(Course c : courses) {
        if(c.equals(course)) {select.setModules(c.getModulesOnCourse());}
    }

现在理论上它们都应该可以完美地工作,但两者都不是。我只是想知道是否有人可以帮助我理解原因并提供解决方案。为方便起见,我将附上下面所有文件的要点。

The gist

【问题讨论】:

  • 您是否覆盖了Course 的equals() 方法?

标签: java list user-interface javafx


【解决方案1】:

将== 与Strings 等对象一起使用绝不是一个好主意。始终使用.equals。

如果您将.equals 与您自己的自定义对象一起使用,请确保您覆盖.equals 方法并对其进行编码,以便您可以定义自己的条件来使两个课程相等。如果您不这样做,该方法很可能总是返回 false。

【讨论】:

  • 非常感谢。我知道重写 equals 方法,但我没有意识到这是必要的。我认为已经存在的方法可以解决问题,但显然不是。谢谢你。我现在也知道以供将来参考!
  • 乐于助人。有趣的是,想象Object 的equals 方法与== 相同是最准确的,因此如果您认为有机会使用它,则应始终覆盖它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 1970-01-01
  • 2022-01-09
  • 2021-09-14
  • 2021-09-07
  • 1970-01-01
  • 2015-10-03
相关资源
最近更新 更多