Java 迭代一次,同时仍然获得所有值

Java iterate once while still getting all the values

我目前正在使用 Bukkit 1.8 API,并使用 Java 7.

我正在进行迭代:

for(String ranks : plugin.getConfig().getStringList("selllallranks"))

在这个 for 循环中我有一个 if/else 语句,查看玩家是否有权限。如果他们这样做,应该给他们发送一次消息。但是,它向他们发送了 26 次。这是因为它正在迭代的内容中有 26 个字符串。

我已经 尝试 Google 上搜索一种方法来一次遍历多个值,同时仍然获得这些值,但没有找到我喜欢的东西。我将如何遍历所有值,同时仍然获取内部的所有值,将代码发送到 once.

我不能只在末尾添加 break; 的原因是因为他们可能没有对 26 个字符串之一的许可,但是在 26 个字符串之一,他们也可以有许可。如果我确实中断了,它将发送一条无效的消息消息,并在他们有权使用其他字符串的情况下继续使用代码。

我正在使用它来检查权限:

if(p.hasPermission("duocraft.sellall." + ranks)){
    // continuing code
}else{
    // send no permission message.
}

Inside of this for-loop I have an if/else statement, seeing if player has a permission. If they do it should send them a message ONCE. However, it is sending it to them 26 times. This is because what it is iterating through has 26 strings inside of it.

一旦满足向玩家发送消息的条件,使用break关键字退出循环有什么问题?

使用标志并在循环后发出消息。

像这样:

boolean hasPermission = true;
for(String ranks : plugin.getConfig().getStringList("selllallranks")) {
    if(p.hasPermission("duocraft.sellall." + ranks)) {
        // continuing code
    } else {
        hasPermission = false;
    }
}
if(!hasPermission) {
    // send no permission message.
}

如果您想跟踪缺少哪些权限,您可以将它们存储在 Set:

Set<Sting> unPermitted = new HashSet<>();
for(String ranks : plugin.getConfig().getStringList("selllallranks")) {
    if(p.hasPermission("duocraft.sellall." + ranks)) {
        // continuing code
    } else {
        unPermitted.add(ranks);
    }
}
if(!unPermitted.isEmpty()) {
    // send no permission message.
}