[ https://issues.apache.org/jira/browse/JENA-1391?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16310292#comment-16310292 ]
ASF GitHub Bot commented on JENA-1391: -------------------------------------- Github user afs commented on a diff in the pull request: https://github.com/apache/jena/pull/337#discussion_r159528932 --- Diff: jena-base/src/main/java/org/apache/jena/atlas/lib/Pair.java --- @@ -37,6 +40,30 @@ public A car() { return a ; } public B cdr() { return b ; } + public static class OfSameType<T> extends Pair<T, T> { + --- End diff -- Point 3 was the observation ``` public <S, X> S apply(BiFunction<X, X, S> f, Function<T, X> op) { return f.apply(op.apply(a), op.apply(b)); } ``` could be a function that can acts on `Pair<X,X>`. ``` static public <S, X> S apply(Pair<X,X> pair, BiFunction<X, X, S> f, Function<T, X> op) { return f.apply(op.apply(pair.car()), op.apply(pair.cdr())); } ``` now whether `<S, X>` can meaningfully/usefully be `<S, X extends FOO>` and interface FOO defines the "to boolean" method, I don't usually push generics very hard - I leave that to Scala. > Add Convenience Methods to Dataset > ---------------------------------- > > Key: JENA-1391 > URL: https://issues.apache.org/jira/browse/JENA-1391 > Project: Apache Jena > Issue Type: Improvement > Components: ARQ > Affects Versions: Jena 3.4.0 > Reporter: Adam Jacobs > Assignee: A. Soroka > Priority: Trivial > > The Dataset interface could provide several convenience methods similar to > the Model interface, allowing usability of RDF quads on par with RDF triples. > Specific examples include, > # add(Dataset) > # remove(Dataset) > # union(Dataset) > # intersection(Dataset) > # difference(Dataset) > # isEmpty() > Following is a possible implementation of these methods. > {code:java} > default Dataset add(Dataset d) { > this.getDefaultModel().add(d.getDefaultModel()); > d.listNames().forEachRemaining(name -> > this.getNamedModel(name).add(d.getNamedModel(name))); > return this; > } > default Dataset remove(Dataset d) { > this.getDefaultModel().remove(d.getDefaultModel()); > d.listNames().forEachRemaining(name -> > this.getNamedModel(name).remove(d.getNamedModel(name))); > return this; > } > default Dataset union(Dataset d) { > return DatasetFactory.create().add(this).add(d); > } > default Dataset difference(Dataset d) { > Dataset output = DatasetFactory.create(); > > output.setDefaultModel(this.getDefaultModel().difference(d.getDefaultModel())); > this.listNames().forEachRemaining(name -> { > Model difference = > this.getNamedModel(name).difference(d.getNamedModel(name)); > if (!difference.isEmpty()) output.addNamedModel(name, difference); > }); > return output; > } > default Dataset intersection(Dataset d) { > Dataset output = DatasetFactory.create(); > > output.setDefaultModel(this.getDefaultModel().intersection(d.getDefaultModel())); > Set<String> names = this.names(); > names.retainAll(d.names()); > names.forEach(name -> { > Model intersection = > this.getNamedModel(name).intersection(d.getNamedModel(name)); > if (!intersection.isEmpty()) output.addNamedModel(name, > intersection); > }); > return output; > } > default Set<String> names() { > Set<String> names = new HashSet<>(); > this.listNames().forEachRemaining(names::add); > return names; > } > default boolean isEmpty() { > return this.asDatasetGraph().isEmpty(); > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)