Query Java object graphs in a typed and streamed fashion
A swisspush project
What about:
from(invoice).
.find(Article.class)
.filter(article -> article.getType().equals("hardware")
.extract(Article::getVendor)
.filter(vendor -> !vendor.getName().equals("Apple")
.find(Office.class)
.then(
(offices -> offices.extract(Office::getCity)),
(offices -> offices.find(Person.class).extract(Person::getFullName)))
.stream()
Returns the name of employees and city name of the offices of non-Apple vendors that sells hardware article on this invoice.
find
traverses the object graph to find all occurences in properties, maps and collections. In the example above, the structure could be:
Invoice
|
| *
Lines --- Article
| *
|
Vendor
| *
|
Company
|
| *
Office --- Staff --- * Employee --- Person
Nice?