获取特定的HashMap实体并获取详细信息

时间:2015-03-19 12:29:53

标签: java hashmap

以下是我的课程:

HouseDetails:

private String forename;
private String surname;
private double houseName;
private int numberofHouses;


public CreditCardDetails(String forename, String surname, double houseName, int numberofHouses) {
    this.forename = forename;
    this.surname = surname;
    this.houseName = houseName;
    this.numberofHouses = numberofHouses;
}

HousePurchase:

 HashMap <String, HouseDetails> houses = new HashMap<String, HouseDetails>();

这只是一个例子。 我正在尝试查看houseNumber是否首先存在,然后检查houseNumber是否与numberOfHouses相关联。

这是我到目前为止所尝试的:

public void checkIfHouseMatches(String number ,int numberofHouses){
    for (HouseDetails det : houses.values()) 
        if (houses.containsKey(number) && det.getNumberofHouses() == numberOfHouses) {
            System.out.println("True");
        }
        else {
        }

但是,如果numberofHouses与HashMap中的任何实体匹配,而不是我输入的特定门牌号,则返回true。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

你的支票错了。

您现在正在执行的操作将检查地图是否包含该号码,如果您传递了HouseDetails numberOfHouses,则会返回true

假设你有3个房子的详细信息

HouseDetail1 (number = 1, noOfHouses = 5)
HouseDetail2 (number = 2, noOfHouses = 6)
HouseDetail3 (number = 3, noOfHouses = 5)

你搜索了1号和noOfHouses = 6 第一次迭代将是假的,因为houses.containsKey(number)truedet.getNumberofHouses() == numberOfHousesfalse

第二次迭代都是true - 但这是错误的。将其更改为:

if(houses.containsKey(number)){
     if(houses.get(number).getNumberofHouses() == numberOfHouses){
         System.out.println("True");
     }else{
    }
 }

答案 1 :(得分:0)

如果要从HashMap中的特定条目访问详细信息,请使用get(Object key)方法。在您的情况下,checkIfHouseMatches可以实现为:

return houses.containsKey(number) ? houses.get(number).getNumberofHouses() == numberofHouses : false;

无需迭代地图的值。