检查哈希图中的列表是否包含 2 个值并且仅包含这 2 个值

Check if a list within the hashmap contains 2 values and only those 2 values

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

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

要检查列表是否包含两个特定的 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。不过不确定我是否正确理解了你的问题。

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

compareTo() 方法比较两个 Material 对象和 returns 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;
       }
   }
}

注:以上代码为逻辑说明。我没有执行过。可能有语法错误。