将嵌套循环转换为Java8流

将嵌套循环转换为Java8流,java,for-loop,java-8,Java,For Loop,Java 8,我有以下嵌套for循环,需要将其转换为声明性代码 for (String variable : variables ){ boolean validAttribute = false; if(variable.equals(SOME_CONSTANT)){ validAttribute = true; } else { for(String attrName: attrNames){ i

我有以下嵌套for循环,需要将其转换为声明性代码

for (String variable : variables ){
      boolean validAttribute = false;
      if(variable.equals(SOME_CONSTANT)){
          validAttribute = true;
      }
      else {
         for(String attrName: attrNames){
            if(variableName.equals(attrName)){
                validAttribute = true;
                break;
            }
         }
      }
      if(!validAttribute){
          return false;
      }
 }
我能够通过使用
flatMap
实现它。但是,与前面的for循环相比,在第一个不匹配的条目处中断似乎效率不高。还有其他更简单的方法吗

(下面的代码似乎很难理解)

List inValidVariables=attrNames.stream().flatMap(attrName->variableNames.stream())
.filter(variableName->!variableName.equals(attrName)&&!variableName.equals(某些常量)))
.collect(Collectors.toList());
返回inValidVariables.size()==0;

我认为这应该符合您的要求:

variables.stream().noneMatch(variable-> !variable.equals(CONSTANT)&&attrNames.stream().noneMatch(attrName -> variable.equals(attrName)));
如果每个变量等于常量或属性名之一,则返回
true


否则它返回
false
(如果有任何变量与常量或属性名不匹配)

我个人会这样解决这个问题

    variables.stream().allMatch((item) -> item.equals(SOME_CONSTANT) 
                                || attrNames.contains(item));
我认为streams应该使您的任务更简单,而不是更复杂,这就是为什么我没有将其用于内部循环的原因,因为您可以重构它


这里是ideone,您可以运行这两种方法

您不能用
variable->stuff
代替
variable->{return stuff;}
?我更喜欢您的答案(我认为很复杂),而且我使用的streams api没有那么长。但是并行流不会使它(更快吗?)吗?@griFlo我不知道,我昨天开始研究java8:)谢谢,满足了我的期望。
    variables.stream().allMatch((item) -> item.equals(SOME_CONSTANT) 
                                || attrNames.contains(item));