Java - 如何在地图中循环查找另一个类的实例

时间:2017-03-15 18:00:03

标签: java loops methods maps

有问题的课程如下:

   public Customer(String aName, String anAddress, int anArea)
   {
      this.fullName = aName;
      this.address = anAddress;
      this.area = anArea;
   }

我创建了这样的地图(customers变量分别初始化,创建了一个hashmap):

   public void addCustomer(String regNo, String name, String address, int area)
   {
      customers.put(regNo, new Customer(name, address, area));
   }

我希望程序做的是遍历地图,检查具有特定区号的客户。

方法标题如下所示:

   public Customer findCustomersInArea(int area)
   {

   }

我创建了一个单独的方法,使用for循环遍历地图,打印与Customer对象关联的所有细节,我试图模拟这个方法,但无济于事。它看起来像这样:

    public void printCustomers()
   {
      Set<String> customerKeys = customers.keySet();
      for (String eachCustomer: customerKeys)
      {
         System.out.println (customers.get(eachCustomer));
      }
   }

我希望我很清楚,如果我需要提供更多细节,请告诉我。

3 个答案:

答案 0 :(得分:2)

此答案基于此SOURCE

只需迭代并寻找您需要的东西。 在此示例中,我创建了List以返回具有此匹配区域的所有客户

public List<Customer> findCustomersInArea(int area)
{
    // create a list to store all Customer with given area
    List<Customer> inArea = new ArrayList<Customer>();
    // iterate all entries in customers map
    for (Map.Entry<String, Customer> entry : customers.entrySet())
    {
        // get the customer
        Customer c = entry.getValue();
        if (c.getArea() == area) {
            // do what you need, for example add to a list
            inArea.add(c);
        }
    }
    // return the list with all customers
    return inArea;
}

免责声明:代码是我手机上的动态写的,因此可能包含一些拼写错误。

答案 1 :(得分:0)

你的意思是这样的:

public Customer findCustomersInArea(int area){
    for(Customer c : customers.values()){  // iterate throw each Customer in the Map 
        if(c.getArea() == area)  // if the area of the customer is the one you search
            return c;   // return the customer
    }
}

来自Java文档:Map.values()

答案 2 :(得分:0)

如果JDK&gt; = 8是可以承受的,您可以过滤customers.values以仅生成所需的值,例如:

class Customer {
  String name, address;
  int area;

  public Customer(String name, String address, int area){
    this.name = name;
    this.address = address;
    this.area = area;
  }
  @Override
  public String toString(){
    return String.join(", ",name, address, area+"");
  }
}

List<Customer> list = Stream.of(
  new Customer("foo1", "address1", 1 ),
  new Customer("foo2", "address2", 2 ),
  new Customer("foo3", "address3", 3 ),
  new Customer("foo4", "address4", 4 )
).collect(Collectors.toList());

List<Customer> selectedCustomers = list.stream()
  .filter(c -> c.area > 2)
  .collect(Collectors.toList());

请注意,示例中的list分配将是您的customers.values,然后只需替换filter来电中的条件。