我有以下嵌套 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/