I have a model object which contains nested arrays and i want to retrieve some details within that model .How to collect property msg from subscriberCriteriaList into an array where subscriberCriteriaList.status is FAIL. I would expect java 8 solution for the same ? Below is the sample model objects and the corresponding json structure .
public class Data{
private List<subscriberList> subscriberCriteriaList;
}
public class subscriberList{
private String mdn;
private List<SubscriberCriteriaList> subscriberCriteriaList;
}
public class SubscriberCriteriaList{
private String status;
private String msg;
}
Sample json structure
{
"subscriberList": [
{
"mdn": "string",
"subscriberCriteriaList": [
{
"status": "FAIL",
"msg": "error message"
}
]
}
]
}
Assuming that the top-level object has type Data
, and appropriate getters are available in all the mentioned classes, it is possible to apply flatMap
to the nested lists and filter by status
value:
String[] failureMessages = data.getSubscriberCriteriaList()
.stream() // Stream<subscriberList>
.flatMap(sl -> sl.getSubscriberCriteriaList().stream()) // Stream<SubscriberCriteriaList>
.filter(scl -> "FAIL".equals(scl.getStatus()))
.map(SubscriberCriteriaList::getMsg) // map to messages
.distinct() // (optionally) remove duplicates if necessary
.toArray(String[]::new);