检查hashmap中的列表是否包含2个值,并且只包含这2个值

时间:2015-08-22 22:52:31

标签: java bukkit

如果此hashmap包含2个特定值,如果它包含除这2个值之外的任何其他值,它将取消事件,我将如何检查? (2个值)每个玩家的字符串是标识符,也就是玩家的唯一标识符。因此,如果玩家在散列图中有3个或更多值,则会取消该事件。

HashMap<String, List<Material>> result = new HashMap<>();
List<Material> values = new ArrayList<>();

2 个答案:

答案 0 :(得分:1)

要检查列表是否包含两个特定的Material枚举,只有那两个,您可以检查列表是否包含两个元素(列表的长度是否为2),然后将这两个元素中的每一个进行比较看他们是否是正确的类型。示例不完整的代码:

if (result.containsKey(PLAYER_NAME) && result.get(PLAYER_NAME).size() == 2) {
    List<Material> list = result.get(PLAYER_NAME);
    Material first = list.get(0);
    Material second = list.get(1);
    if (first == Material.FIRST && second == Material.SECOND || first == Material.SECOND && second == Material.FIRST) {
        //Don't cancel the event
    }
}

PLAYER_NAME是播放器的String名称,Material.FIRST和Material.SECOND是您要检查的两个Material。不确定我是否正确理解了你的问题。

答案 1 :(得分:1)

我从问题中理解,我在代码中写下了。

compareTo()方法比较两个Material对象,如果匹配则返回0。假设变量result可供该方法使用。

public boolean continueEvent(String playerId, List<Material> values)
{
   List<Material> mapValues=result.get(playerId);
   if( mapValues.size()!=2){
      return false;
   }
   else{
      if((mapValues.get(0).compareTo(values.get(0)==0 && mapValues.get(1).compareTo(values.get(1)==0) || (mapValues.get(0).compareTo(values.get(1)==0 && mapValues.get(1).compareTo(values.get(0)==0)){
         return true;
      else
         return false;
       }
   }
}

注意:上面提到的代码是逻辑的说明。我没有执行它。可能存在语法错误。