我会把它改写成
private JsonNode getNodeFunc2(JsonNode parentNode) {
return Stream.of(JsonPointer.compile("/foo"), JsonPointer.compile("/bar"))
.filter(i -> !parentNode.at(i).isMissingNode())
.findFirst()
.map(parentNode::at)
.orElse(parentNode);
}
或
private JsonNode getNodeFunc3(JsonNode parentNode) {
return Stream.of(JsonPointer.compile("/foo"), JsonPointer.compile("/bar"))
.map(parentNode::at)
.filter(Predicate.not(JsonNode::isMissingNode))
.findFirst()
.orElse(parentNode);
}
或
private JsonNode getNodeFunc4(JsonNode parentNode) {
return Stream.of("/foo", "/bar")
.map(JsonPointer::compile)
.map(parentNode::at)
.filter(Predicate.not(JsonNode::isMissingNode))
.findFirst()
.orElse(parentNode);
}
因为那块
if (!parentNode.at(jp1).isMissingNode()) {
return parentNode.at(jp1);
} else if (!parentNode.at(jp2).isMissingNode()) {
return parentNode.at(jp2);
}
是代码重复,可以通过循环灵活处理:
for (JsonPointer jsonPointer : jsonPointers) {
JsonNode kid = parentNode.at(jsonPointer);
if (!kid.isMissingNode()) {
return kid;
}
}