防止访问多个循环

时间:2013-02-12 09:46:21

标签: java design-patterns

我想知道防止以可扩展方式访问多个循环的最佳方法

String token;
ArrayList numbers;
ArrayList names;

for(String n : numbers){
   if(token.equals(n)){
      break;
   }
}

for(String n : names){
   if(token.equals(n)){
      break;
   }
}

我想跳过访问第二个循环,如果我发现第一个循环,但我想以可扩展的方式进行,因为可能以后我会有5个列表

我想到的解决方案

  1. 在循环中进行多次返回,但这不是一种好的编程技术

  2. 设置一个标志并在其他循环中使用它(通过if条件或将其置于循环条件中,但是当我们有5个不同的列表时,这意味着我将有5个标志并检查循环之前我

  3. 我很感激你的建议。谢谢

3 个答案:

答案 0 :(得分:4)

public static boolean contains (Object element, Collection <?> ... collections)
{
    for (Collection c: collections)
        if (c.contains (element)) return true;

    return false;
}

答案 1 :(得分:1)

如果您的Set有重复项,请使用MultiSet或番石榴ArrayList

然后你只需要做

        String token = "";
        Set<String> numbers = Sets.newHashSet();
        Set<String> names = Sets.newHashSet();
        if (numbers.contains(token)) {

        }
        else if (names.contains(token)) {

        }

contains(token)的{​​{1}}检查几乎总是比Set更快。

答案 2 :(得分:0)

您是否知道可以标记循环,并将标记作为参数传递给breakcontinue语句?

像这样:

mytag: for(int i =0; i < 10; i++){
  for(int j =0; j < 10; j++){
    if(done){
      break mytag;
    }
  }
}

这适用于switchwhiledo-while,适用于continuebreak