LinkedHashMap - 包含方法

时间:2014-09-24 18:16:40

标签: java contains linkedhashmap

我需要阅读一个标记来验证我是否会发送电子邮件,此标记位于LinkedHashMap,因此我试图查看其中的ID,然后,我将不得不问,无论是真还是假,我都在尝试这个:

    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 个答案:

答案 0 :(得分: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) {

您所做的事情调用接收任何Object的contains方法,如果该对象属于地图的值,则返回true。你可能不想要那个,我想你想要做的是检索与&#34; haveFiles&#34;相关联的值。键入地图,因为你必须使用get方法。

PS:另外,如果file.findAllFiles(userid)方法真正调用某些数据库内容,你可能只想调用一次(第一次看起来完全不需要我)。

答案 1 :(得分: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
 }

..假设你file.findAllFiles()返回一个带有标志及其布尔状态的map对象,Flag是一个包含所有支持标志的枚举。

表达式

(keyValueMap.contains(Flag.HAVE_FILES) == true)
仅当keyValueMap包含Flag.HAVE_FILES的条目且值为true时,

才会计算为true。