有问题的课程如下:
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));
}
}
我希望我很清楚,如果我需要提供更多细节,请告诉我。
答案 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
来电中的条件。