package org.opendaylight.mdsal.binding.api.query;
import java.util.List;
-import java.util.Spliterator;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
* @param <T> Result object type
*/
@NonNullByDefault
-public interface QueryResult<T extends DataObject> {
+public interface QueryResult<T extends DataObject> extends Iterable<QueryResult.Item<T>>, Immutable {
/**
* A single item in the result set. It is identified by its path and the corresponding object..
*
InstanceIdentifier<T> path();
}
- /**
- * Returns a spliterator over values of the result.
- *
- * @return Returns the a spliterator which visits query results.
- */
- // TODO: @throws IllegalStateException if values have been already been consumed?
- // FIXME: we really may want to wrap each entry in a CheckedValue, so that we can communicate fetch problems
- Spliterator<? extends Item<T>> spliterator();
-
/**
* Returns a sequential {@link Stream} of values from the result.
*
* @return A stream of non-null values.
*/
- default Stream<? extends Item<T>> stream() {
+ default Stream<Item<T>> stream() {
return StreamSupport.stream(spliterator(), false);
}
*
* @return A stream of non-null values.
*/
- default Stream<? extends Item<T>> parallelStream() {
+ default Stream<Item<T>> parallelStream() {
return StreamSupport.stream(spliterator(), true);
}
import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
+import com.google.common.base.Function;
import com.google.common.base.VerifyException;
+import com.google.common.collect.Iterators;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.VarHandle;
+import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Spliterator;
-import java.util.function.Function;
import java.util.stream.Stream;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
+import org.gaul.modernizer_maven_annotations.SuppressModernizer;
import org.opendaylight.mdsal.binding.api.query.QueryResult;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@NonNullByDefault
+@SuppressModernizer
final class DefaultQueryResult<T extends DataObject>
implements QueryResult<T>, Function<Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>, QueryResult.Item<T>> {
private static final VarHandle ITEM_CODEC;
}
@Override
- public Spliterator<? extends Item<T>> spliterator() {
+ public Iterator<Item<T>> iterator() {
+ return Iterators.transform(domResult.iterator(), this);
+ }
+
+ @Override
+ public Spliterator<Item<T>> spliterator() {
return new DefaultQueryResultSpliterator<>(this, domResult.spliterator());
}
@Override
- public Stream<? extends Item<T>> stream() {
+ public Stream<Item<T>> stream() {
return domResult.stream().map(this);
}
@Override
- public Stream<? extends Item<T>> parallelStream() {
+ public Stream<Item<T>> parallelStream() {
return domResult.parallelStream().map(this);
}
import com.google.common.annotations.Beta;
import java.util.List;
import java.util.Map.Entry;
-import java.util.Spliterator;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.opendaylight.yangtools.concepts.Immutable;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
*/
@Beta
@NonNullByDefault
-public interface DOMQueryResult extends Immutable {
+public interface DOMQueryResult extends Iterable<Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>>, Immutable {
- Spliterator<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> spliterator();
-
- Stream<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> stream();
+ default Stream<Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> stream() {
+ return StreamSupport.stream(spliterator(), false);
+ }
- Stream<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> parallelStream();
+ default Stream<Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> parallelStream() {
+ return StreamSupport.stream(spliterator(), true);
+ }
default List<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items() {
return stream().collect(Collectors.toUnmodifiableList());
import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableList;
+import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.Spliterator;
-import java.util.stream.Stream;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.opendaylight.mdsal.dom.api.query.DOMQueryResult;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
public final class EagerDOMQueryResult implements DOMQueryResult {
private static final EagerDOMQueryResult EMPTY_INSTANCE = new EagerDOMQueryResult(ImmutableList.of());
- private final ImmutableList<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items;
+ private final ImmutableList<Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items;
private EagerDOMQueryResult(final List<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items) {
this.items = ImmutableList.copyOf(items);
}
@Override
- public Spliterator<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> spliterator() {
- return items.spliterator();
+ public Iterator<Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> iterator() {
+ return items.iterator();
}
@Override
- public Stream<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> stream() {
- return items.stream();
- }
-
- @Override
- public Stream<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> parallelStream() {
- return items.parallelStream();
+ public Spliterator<Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> spliterator() {
+ return items.spliterator();
}
@Override