我有一个对象,里面有操作数和谓词。我有以下模型:
operand[0] - predicates = NULL
- operands[0] - predicates = NULL
- operands[0] - operands = NULL
- predicates[0] - tableVal="val1.aaa"
- predicates[1] - tableVal="val.bbb"
- predicates[2] = tableVal="val5.ccc"
- operands[1] - operands = NULL
- predicates[0] - tableVal="val3.asd"
- predicates[1] - tableVal="val2.ccc"
我正在寻找一个包含"bbb"我需要一个递归方法来遍历整个结构,直到它找到tableVal包含"bbb"的谓词。
我试过这样做:
private String searchInsideStructure(Object obj, int indexOperands) {
if (null != obj.predicates) {
indexPredicates = 0;
while(obj.predicates.length > indexPredicates) {
if(predicates[indexPredicates].tableVal.contains("bbb")) {
return tableVal;
}
indexPredicates++;
}
}
if (null != obj.operands) {
while (indexOperands < obj.operands.length) {
searchInsideStructure(obj.operands[indexOperands], indexOperands);
indexOperands++;
}
}
return null;
}
.................
indexOperands = 0;
searchedField = searchInsideStructure(initialObj, indexOperands);
if (null != searchedField) {
return searchedField
}
但是它返回null。如何更改此递归方法以遍历操作数,同时查找谓词并在谓词中找到所需的tableVal (" value .bbb"在这个例子中)??谢谢!
有两种修复方法可以考虑:
- 在第二个
while
循环中,您应该验证searchInsideStructure
的结果,如果不为null则传播它 - 您应该避免传播
indexOperands
,因为它会使您在测试时跳过一些谓词。然后您可以使用for(each)循环来浏览谓词。