It seems redundant, but I think they're somewhat different concepts. The Predicate passed into the stream method is for evaluating the Resources relevant for traversal, whereas (at least I'm assuming) that any subsequent filters would filter the subsequent stream of resources. Having that sort of redundancy would allow you to traverse a structure like the following:
- myasset.jpg (dam:Asset) - renditions (nt:folder) - original (nt:file) - rendition1.jpg (nt:file) so if you wanted to get just a stream of the nt:file resources you could do: myassetResource.stream(maxDepth(2)).filter(isResourceType("nt:file")).forEach(e -> {DO_SOMETHING}); I like the idea of adding the predicates either in the API or as a separate dependency as there are likely a few common patterns that would be used quite a bit. -Dan On Mon, Jun 4, 2018 at 1:31 PM, Jason E Bailey <j...@apache.org> wrote: > > > - Jason > > On Mon, Jun 4, 2018, at 12:35 PM, Daniel Klco wrote: > > > > > Rather than having another parameter, what about providing a > > ResourceChildrenPredicate? Based on the current API it looks like you'd > > have to provide the current resource to make this work, but it seems like > > it would be very useful to have a predicate which would only allow for > both > > direct children or children up to a particular depth. I'd see it useful > to > > provide 2-3 different default predicates to help with common activities: > > > > ResourceChildrenPredicate - filter the stream of resources based on their > > child status > > ResourceTypePredicate - filter the stream of resource based on their > > resource type > > ValuePredicate - filter the stream of resources based on a value in the > > resource's ValueMap > > > > > > Funny you should mention this. The original ResourceStream object came > from the whiteboard streams project. Which has a whole package dedicated > to defining static predicates. There's even an expression languages in > their as well. However, for filtering, there's already a filter method that > a Stream provides. It's redundant to have a pre-filtered stream. > > However, as a limitation on the stream, you can do the same thing. It > would something like > > - resource.stream(CHILD_RESOURCES); > > or > > - resource.stream(maxDepth(1)); > > maxDepth being a static method that you've imported from the appropriate > library that provides a Predicate >