2013-10-15 19 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; 
}