Java 创建包含课程和成员人数的地图

Java 创建包含课程和成员人数的地图,java,Java,不知道如何正确地问我的问题: 我想创建一张地图,上面应该列出课程的名称和他的成员。例如:{mathe=4,deutsch=2}。有没有一个简单的方法可以做到这一点?也许需要一个过滤器的帮助 到目前为止,我创建了这段代码,但它不起作用: HashMap<String, Integer> distribution = new HashMap<String, Integer>(); for(Course c : courses) { int k =0; for

不知道如何正确地问我的问题: 我想创建一张地图,上面应该列出课程的名称和他的成员。例如:{mathe=4,deutsch=2}。有没有一个简单的方法可以做到这一点?也许需要一个过滤器的帮助

到目前为止,我创建了这段代码,但它不起作用:

HashMap<String, Integer> distribution = new HashMap<String, Integer>();

for(Course c : courses)
{
    int k =0;
    for (Entry<Integer, Student> entry : students.entrySet()) {
      for (Course cdeep : entry.getValue().getCourses()) {
        if(cdeep.getName()==c.getName())
        {
        k++;
        }
      }
    }
  distribution.put(c.toString(), k);
}
在第一次运行过程中,c是“mathe”,进入的是第一个学生。 现在我检查他是否是“mathe”课程的成员:

如果这是真的,计数器k增加1。 在跑步结束时,k=1,因为第一个学生是课程的成员。现在我们来看第二个学生。他应该是“dumm”和“mathe”课程的成员。所以在检查之后,k应该增加1。但是当我检查这个时,if语句返回false:

if(cdeep.getName()==c.getName()) 
// returns: false. cdeep.getName() = "mathe" and c.getName() = "mathe"
在调试过程中,我只注意到字符串的ID不同,但它们的内容仍然相同(=“mathe”)。

在字符串上使用
equals()
,而不是
=

if(cdeep.getName().equals(c.getName())) 
使用.equals()方法而不是
=
,因为它是比较引用而不是值。在你的情况下,参考是不同的,所以它不相等

if(cdeep.getName()!=null && cdeep.getName().equals(c.getName()))

在使用等于作为名称之前,请执行
null
检查。

为什么要使用==进行比较,因为它只会比较对象,而不会比较对象的值。使用相等。您还必须了解SCP和字符串不变性。:)完美的它很管用,谢谢!但是对于我的任务来说,这是最简单的方法吗?@DavidBruns如果这是你的问题,那么你的算法是完全合理的。是的,我认为可能有更好的方法。谢谢
if(cdeep.getName().equals(c.getName())) 
if(cdeep.getName()!=null && cdeep.getName().equals(c.getName()))