Implement lazy iterators/streams for ConsistentMap
Change-Id: Id643726441c99186667c104cfdd1dab95b06cf87
diff --git a/core/api/src/main/java/org/onosproject/store/primitives/DefaultConsistentMap.java b/core/api/src/main/java/org/onosproject/store/primitives/DefaultConsistentMap.java
index 1bc62b3..b692bf3 100644
--- a/core/api/src/main/java/org/onosproject/store/primitives/DefaultConsistentMap.java
+++ b/core/api/src/main/java/org/onosproject/store/primitives/DefaultConsistentMap.java
@@ -16,6 +16,7 @@
package org.onosproject.store.primitives;
import java.util.Collection;
+import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
@@ -32,6 +33,7 @@
import org.onlab.util.Tools;
import org.onosproject.store.service.AsyncConsistentMap;
+import org.onosproject.store.service.AsyncIterator;
import org.onosproject.store.service.ConsistentMap;
import org.onosproject.store.service.ConsistentMapException;
import org.onosproject.store.service.ConsistentMapException.ConcurrentModification;
@@ -184,6 +186,11 @@
}
@Override
+ public Iterator<Entry<K, Versioned<V>>> iterator() {
+ return new DefaultIterator<>(complete(asyncMap.iterator()));
+ }
+
+ @Override
public void addListener(MapEventListener<K, V> listener, Executor executor) {
complete(asyncMap.addListener(listener, executor));
}
@@ -208,6 +215,24 @@
return asyncMap.statusChangeListeners();
}
+ private class DefaultIterator<K, V> implements Iterator<Entry<K, Versioned<V>>> {
+ private final AsyncIterator<Entry<K, Versioned<V>>> iterator;
+
+ public DefaultIterator(AsyncIterator<Map.Entry<K, Versioned<V>>> iterator) {
+ this.iterator = iterator;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return complete(iterator.hasNext());
+ }
+
+ @Override
+ public Map.Entry<K, Versioned<V>> next() {
+ return complete(iterator.next());
+ }
+ }
+
@Override
public Map<K, V> asJavaMap() {
synchronized (this) {