У меня есть ArrayNode, похожий на эти имена "results"
:
[{
"subjectName": "Eclipse",
"code": "EC1",
"states": [
{
"subjectName": "LunorEx1",
"code":"E1"
},
{
"subjectName": "LunorEx2",
"code":"E2"
},
{
"subjectName": "Expus LunorEx3 ",
"code":"E6"
}]
},
{
"subjectName": "Lasena",
"code": "LS1",
"states": [
{
"subjectName": "SunorEx1",
"code":"S1"
},
{
"subjectName": "SunorEx2",
"code":"S2"
}]
}, {
"subjectName": "Gilesh",
"code": "GL2",
"states": [ ]
}]
эта переменная общедоступна.
Используя Java 8, я хочу иметь возможность проверить, существует ли, например, subjectName, равный «Eclipse», и код, равный «EC1», если он существует, то я хочу искать в его состояниях json и находить состояние, которое имеет, например, subjectName равно "LunorEx1" и код "E1", если все они найдены, я хочу вернуть true
private static boolean subjectValidation( String parentSubjectName, String parentCode, String childSubjectName, String childCode){
boolean valid = false;
try {
JsonNode subjectData = StreamSupport.stream(results.spliterator(), true)
.filter(c -> c.get("subjectName").asText().equals(parentSubjectName) &&
c.get("code").asText().equals(parentCode) )
.collect(Collectors.toList()).get(0);
valid = StreamSupport.stream(subjectData.get("states").spliterator(), true)
.anyMatch(k -> k.get("states").get("subjectName").asText().equals(childSubjectName) &&
k.get("states").get("code").asText().equals(childCode));
} catch (Exception e) {
}
return valid;
}
Я хочу оптимизировать это, потому что у меня есть несколько массивов JSON с одинаковой структурой, и я делаю несколько похожих проверок .... и обрабатывать, когда первый поток ничего не возвращает.
Может ли кто-нибудь помочь мне, дать несколько советов о том, как я могу сделать это лучше?