繁体   English   中英

将嵌套循环转换为Java 8流

[英]Converting nested loops to Java 8 streams

我有以下嵌套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 但是,在第一个不匹配的条目中,循环使用的早期似乎并不高效。 还有其他更简单的方法吗?

(以下代码似乎很难理解)

List<String> inValidVariables = attrNames.stream().flatMap(attrName -> variableNames.stream()
                            .filter(variableName -> !variableName.equals(attrName) && !variableName.equals(SOME_CONSTANT)))
                            .collect(Collectors.toList());
 return inValidVariables.size() ==0;

就个人而言,我会这样解决这个问题

    variables.stream().allMatch((item) -> item.equals(SOME_CONSTANT) 
                                || attrNames.contains(item));

我认为流应该让你的任务变得更容易而不是更复杂,这就是为什么我没有将它用于内循环,因为你可以重构它。

这里是ideone的链接 ,您可以在其中运行这两种方法

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

variables.stream().noneMatch(variable-> !variable.equals(CONSTANT)&&attrNames.stream().noneMatch(attrName -> variable.equals(attrName)));

如果每个变量等于CONSTANT或其中一个attrNames,则返回true

否则它返回false (如果是任何与CONSTANT或任何attrName不匹配的变量)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM