2013-10-15 15 views
0

我有一个类与各种布尔和整数。Java HashMap迭代每个变量和返回值

class Animal { 

    boolean mHappy = false; 
    boolean mHungry = false; 
    boolean mSleeping = false; 
    int mCost = 0; 
    int mWeight = 0; 


    boolean isEmpty() { 
     return !mHappy && !mHungry && !mSleeping && mCost == 0 && mWeight == 0; 
    } 
} 

该方法boolean isEmpty()会告诉我,如果所有的值都是空的。

现在,我想我所有的数据移动到包含HashMap:

class Animal { 

    HashMap<String, Boolean> mBools = new HashMap<String, Boolean>(){{ 
     put("mHappy", false); 
     put("mHungry", false); 
     put("mSleeping", false); 
     } 
    }; 

    HashMap<String, Integer> mInts = new HashMap<String, Integer>(){{ 
     put("mCost", 0); 
     put("mWeight", 0); 
     } 
    }; 


    boolean isEmpty() { 
     // MY QUESTION: How can I make this function iterate through each HashMap, 
     // regardless of size, and check to make sure it's "false" or "0" like this 
     // line did when I only was using static booleans and integers? 
     return !mHappy && !mHungry && !mSleeping && mCost == 0 && mWeight == 0; 
    } 
} 

我的问题是有关“布尔的isEmpty()”方法,我怎样才能使这个功能迭代通过每一个HashMap中,无论大小,并检查以确保每个值是“假”或“0”?

+1

需要注意的是一个原始的布尔不能为“空”。 “false”的值与“true”一样有效,“false”并不意味着该值未被使用。如果你真的想区分“空”和有效的布尔值,你必须使用布尔对象,所以引用可以是空值来表示“空”。 –

回答

4

这将做到这一点:

boolean isEmpty() { 
    for (int i : mInts.values()) if (i != 0) return false; 
    for (boolean b : mBools.values()) if (b) return false; 
    return true; 
} 

阅读map tutorial有关通过地图的内容迭代更多信息。

+1

+1,但一些对齐和大括号可以让阅读变得简单,至少对我来说 – upog

2

在每张地图上拨打values() method;您可以遍历返回的值为Collection的值。然后你可以检查每个值,看它们是否为0false视情况而定。

保留boolean,初始化为true,如果一切都“空”到目前为止。如果值不是0false,则将其设置为false

2

你只需要遍历所有的值,在您的地图:

boolean isEmpty { 
    for (Integer i : mInts.values()) { 
    if (i > 0) { 
     return false; 
    } 
    } 
    for (Boolean b : mBools.values()) { 
    if (b) { 
     return false; 
    } 
    } 
    return true; 
}