如果此hashmap包含2个特定值,如果它包含除这2个值之外的任何其他值,它将取消事件,我将如何检查? (2个值)每个玩家的字符串是标识符,也就是玩家的唯一标识符。因此,如果玩家在散列图中有3个或更多值,则会取消该事件。
HashMap<String, List<Material>> result = new HashMap<>();
List<Material> values = new ArrayList<>();
答案 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;
}
}
}
注意:上面提到的代码是逻辑的说明。我没有执行它。可能存在语法错误。