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
>>>>>> 
>>>>>> 
>>>> 

Reply via email to