2014-09-24 67 views
0

我需要讀取一個標誌來驗證我是否會發送電子郵件,該標誌位於LinkedHashMap,所以我試圖通過它查找ID,然後我會必須問是否是真的,我試圖這樣做:LinkedHashMap - 包含方法

while(iterator.hasNext()){ 

     LinkedHashMap<String, Object> fileMap = (LinkedHashMap<String, Object>) iterator.next(); 
     userid = (Long)fileMap.get("USERID"); 
     file.findAllFiles(userid); 

     if(file.findAllFiles(userid).contains(haveFiles = true)){ 
      //send email 
     }else{ 
      //do something 
     } 

    } 

它是正確的嗎?

+2

你有沒有試過這段代碼?它會給你什麼錯誤? – 2014-09-24 18:19:32

+0

我的猜測是你的用戶ID是類型對象? findAllFiles是做什麼的? – 2014-09-24 18:20:50

+0

這是否甚至編譯? – qqilihq 2014-09-24 18:27:37

回答

0

我認爲你的if表達式有邏輯錯誤。

haveFiles = true 

將始終返回true,減少您的表達式:

file.findAllFiles(userid).contains(true) 

因爲(haveFiles = true)分配值true的變量haveFiles。

你還是做對以下的說法:

Map<Flag, Boolean> keyValueMap = file.findAllFiles(userid) 
if(keyValueMap.contains(Flag.HAVE_FILES) == true){ 
    //send email 
}else{ 
    //do something 
} 

..asuming你file.findAllFiles()返回標記地圖對象和他們的布爾狀態和標誌是包含一個枚舉所有支持的標誌。

表達

(keyValueMap.contains(Flag.HAVE_FILES) == true) 

的值爲true,只有當keyValueMap包含Flag.HAVE_FILES的條目和值是true。

+0

非常感謝:D – rpassenger 2014-09-24 19:42:58

0

假設它的作品最多的點:

if(file.findAllFiles(userid).contains(haveFiles = true)) 

那麼我認爲這個問題是在這種狀態下本身。什麼你寫大致相當於寫

??? haveFiles = true;  
if(file.findAllFiles(userid).contains(haveFiles)) 

(其中???可以是ObjectBooleanboolean,不要從您的代碼快照知道)

我敢打賭,你可能想什麼做的是一樣的東西

Boolean haveFiles = file.findAllFiles(userid).get("haveFiles"); 
if (Boolean.TRUE.equals(haveFiles) { 

您所做的一切要求接收任何對象,如果對象是地圖的值中返回true contains方法。你可能不希望這樣做,我想你想要做的就是將與「haveFiles」鍵相關的值檢索到地圖中,因爲你必須使用get方法。

PS:另外,如果file.findAllFiles(userid)方法是真正調用某些數據庫的東西,你可能只想調用它一次(第一次看起來完全不需要我)。