【问题标题】:HashMap - Search for Value of Object and add to listHashMap - 搜索对象的值并添加到列表
【发布时间】:2026-02-09 10:45:01
【问题描述】:

我有 2 个班级 Gym 和 gymMember。目前 Gym 将所有 gymMember 存储在 HashMap gymMembers 中,其中 String 是他们的成员 ID(字符串)。

gymMember 保存变量:

  this.fullName = aName;
  this.address = anAddress;
  this.area = anArea;

我想做的是搜索 HashMap gymMembers 以找出区域 1 中的成员存储在变量 this.area 中,然后将 gymMember 对象返回到新集合。

到目前为止,我已经做到了这一点:

public void findCustomersInArea(int x)
{
    // create a list to store all Customers
List<gymMember> aMember = new ArrayList<gymMember>();

// iterate all entries in the map
for (Map.Entry<String, gymMember> a: gymMembers.entrySet())
{
    // get the customer
    gymMember newMember = a.getArea();
    if (newMember.getArea() == x) {
        // do what you need to add to a list
       newMember.add(newCustomer);
    }
}
}

有人知道我哪里出错了吗?

【问题讨论】:

  • 您应该准确描述问题所在。另外,我强烈建议您以大写字母 (GymMember) 开头的类命名,因为带有小写字母的名称用于变量 (gymMembers)。
  • 问题是代码目前没有编译,我非常不确定这是否是获得所需结果的正确方法。非常感谢:)
  • 我看到的一个问题是a.getArea()Map.Entry 类有两个 getter:getKey()getValue()。我想你的意思是a.getValue()。此外,一旦你建立了你的aMember 列表,你需要以某种方式返回它。

标签: java hashmap


【解决方案1】:
gymMember newMember = a.getValue ();
if (newMember.getArea() == x) {
    // do what you need to add to a list
   aMember.add(newMember);
}

【讨论】:

    【解决方案2】:

    在迭代 Map 时,你应该做的不是 gymMember newMember = a.getArea();

    gymMember newMember = a.getValue();Following 将是您的代码:

        for (Map.Entry<String, gymMember> a : gymMembers.entrySet()) {
            // get the customer
            gymMember newMember = a.getValue();
            if (newMember.getArea() == x) {
                // do what you need to add to a list
                aMember.add(newCustomer);//The name of your list is aMember and not newMember
            }
        } 
    

    因为您要检查每个gymMemberarea 而不是map 中每个entryarea。在这种情况下,由于您只是访问与每个 id 关联的值(即gymMember),您可以这样做:

        for (gymMember gymMember : gymMembers.values()) {//where your Object would be gymMember
              if (gymMember.getArea() == x) {
                aMember.add(gymMember);
            }
        }
    

    【讨论】:

    • 应该是for (gymMember g : gymMember.values()) { if (g.getArea...
    • 是的,没错。我只是将它概括为一个对象,只是为了表明这个概念。这就是我发表评论的原因。也将其编辑为gymMember....
    最近更新 更多