It seems to me that these ideas begin to border on the Stream API, with something like Stream<Tuple> at work.
--- A. Soroka The University of Virginia Library > On Dec 15, 2016, at 3:46 PM, Andy Seaborne <a...@apache.org> wrote: > > > A more considered solution: > > https://gist.github.com/afs/2b8773d10cbe4bc1161e9851de02b3eb > > Andy > > On 14/12/16 12:52, Andy Seaborne wrote: >> >> >> On 14/12/16 11:23, Martynas Jusevičius wrote: >>> But that would still require the functional subclasses of Query? >> >> Yes, but it required no changes to the jena code. There could be a >> library of such utilities. >> >> static <T,X> T apply(X object, Function<X, T> f) { >> return f.apply(object); >> } >> >> static <X> void apply(X object, Consumer<X> c) { >> c.accept(object); >> } >> >> >> >> Dataset dataset = ... ; >> Select selectQuery = new Select("SELECT * { ?s ?p ?o}"); >> ResultSet rs = selectQuery.apply(dataset); >> Consumer<ResultSet> rsp = (t)->ResultSetFormatter.out(t); >> apply(apply(dataset, selectQuery), rsp); >> >> (because Consumer isn't a Function<,Void> :-() >> >> Andy >>> >>> On Wed, Dec 14, 2016 at 11:37 AM, Andy Seaborne <a...@apache.org> wrote: >>>> >>>> >>>> On 12/12/16 21:45, Martynas Jusevičius wrote: >>>>> >>>>> Well, this probably requires some generic method(s) in Dataset/Model >>>>> as well, something like: >>>>> >>>>> T apply(Function<Dataset, T> f); >>>>> >>>>> This would allow nice chaining of multiple queries, e.g DESCRIBE and >>>>> SELECT: >>>>> >>>>> ResultSet results = dataset.apply(describe).apply(select); >>>> >>>> >>>> No need to extend dataset and model and the rest to get experimenting: >>>> >>>> static <T,X> T apply(X object, Function<X, T> f) { >>>> return f.apply(object); >>>> } >>>> // BiFunction<X, Function<X, T>, T> >>>> >>>> >>>> then >>>> >>>> ResultSet results = apply( >>>> apply(dataset, describe), >>>> select); >>>> >>>> >>>> The function f does have any access to the internals of a specific >>>> dataset >>>> so it does not need to be a method of Dataset. >>>> >>>> There is a style thing about how it looks if you are not used to reading >>>> functional application (i.e. backwards!). >>>> >>>> Andy >>>> >>>> >>>>> >>>>> Seems more elegant to me than all the QueryExecution boilerplate. >>>>> >>>>> On Mon, Dec 12, 2016 at 9:00 PM, A. Soroka <aj...@virginia.edu> wrote: >>>>>> >>>>>> What are the kinds of usages to which you are imagining these kind of >>>>>> types being put? >>>>>> >>>>>> --- >>>>>> A. Soroka >>>>>> The University of Virginia Library >>>>>> >>>>>>> On Dec 12, 2016, at 2:03 PM, Martynas Jusevičius >>>>>>> <marty...@graphity.org> >>>>>>> wrote: >>>>>>> >>>>>>> Hey, >>>>>>> >>>>>>> has Jena considered taking advantage of the functional features in >>>>>>> Java >>>>>>> 8? >>>>>>> >>>>>>> What I have in mind is interfaces like: >>>>>>> >>>>>>> Construct extends Query implements Function<Dataset, Model> >>>>>>> >>>>>>> Describe extends Query implements Function<Dataset, Model> >>>>>>> >>>>>>> Select extends Query implements Function<Dataset, ResultSet> >>>>>>> >>>>>>> Ask extends Query implements Function<Dataset, ResultSet> >>>>>>> >>>>>>> >>>>>>> Martynas >>>>>>> atomgraph.com >>>>>> >>>>>> >>>>