java - 将嵌套循环转换为 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){
            if(variableName.equals(attrName)){
                validAttribute = true;
                break;
            }
         }
      }
      if(!validAttribute){
          return false;
      }
 }

我能够通过使用 flatMap 来实现它。但似乎效率不高,因为较早的 for 循环用于在第一个不匹配的条目处中断。还有其他更简单的方法吗?

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

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));

我认为流应该让你的任务更简单而不是更复杂,这就是我没有将它用于内部循环的原因,因为你可以重构它。

这里是 link想出一个你可以运行这两种方法的地方

关于java - 将嵌套循环转换为 Java 8 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31455113/

相关文章:

c - 查找是否输入了否。是否是素数。我得到的输出很奇怪

java - 在 Java 中如何等待所有异步调用完成?

java - gradle 在 POM 中发布带有源文件和依赖项的 Jar

java - 如何使用 Apache Flink 解决 com.esotericsoftware.kryo.Kryo.readObject 处的 NPE?

ios - for循环Swift iOS的退出迭代

java - 如何将 WatchService 更改为流 api

java - 从并行流中收集结果

java - 没有堆栈跟踪的 JXErrorPane

java - 如何使用maven-install-plugin将外部库(jar)+源(zip)添加到pom.xml?

javascript - Angular 'For loop' 未按顺序显示