summaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
authorØyvind Grønnesby <oyving@verizonmedia.com>2019-10-10 15:20:20 +0200
committerØyvind Grønnesby <oyving@verizonmedia.com>2019-10-10 15:20:20 +0200
commitaa1bd43464385c72f3db411e31c5c29036a7f53f (patch)
treeff23179407b015b1fdfa1515f4d0ee0dba1eed6d /vespajlib
parentdee0e03d3513d0c4b96840825ce18b7db4af5068 (diff)
Utility to create stream from Slime array
Diffstat (limited to 'vespajlib')
-rw-r--r--vespajlib/src/main/java/com/yahoo/slime/SlimeStream.java21
-rw-r--r--vespajlib/src/test/java/com/yahoo/slime/SlimeStreamTest.java26
2 files changed, 47 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/slime/SlimeStream.java b/vespajlib/src/main/java/com/yahoo/slime/SlimeStream.java
new file mode 100644
index 00000000000..a6008294a72
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/slime/SlimeStream.java
@@ -0,0 +1,21 @@
+package com.yahoo.slime;
+
+import java.util.function.Function;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
+
+public final class SlimeStream {
+ private SlimeStream() {}
+
+ /**
+ * Create a stream from a Slime {@link Inspector} pointing to an array.
+ * @param array the array inspector
+ * @param mapper the function mapping to Stream elements
+ * @return A Stream of array elements
+ */
+ public static <T> Stream<T> fromArray(Inspector array, Function<Inspector, T> mapper) {
+ return IntStream.range(0, array.entries())
+ .mapToObj(array::entry)
+ .map(mapper);
+ }
+}
diff --git a/vespajlib/src/test/java/com/yahoo/slime/SlimeStreamTest.java b/vespajlib/src/test/java/com/yahoo/slime/SlimeStreamTest.java
new file mode 100644
index 00000000000..116551cea59
--- /dev/null
+++ b/vespajlib/src/test/java/com/yahoo/slime/SlimeStreamTest.java
@@ -0,0 +1,26 @@
+package com.yahoo.slime;
+
+import org.junit.Test;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static org.junit.Assert.assertEquals;
+
+public class SlimeStreamTest {
+ @Test
+ public void test_empty_array() {
+ var inspector = new Slime().setArray();
+ var items = SlimeStream.fromArray(inspector, Inspector::asString).collect(Collectors.toList());
+ assertEquals(List.of(), items);
+ }
+
+ @Test
+ public void test_some_elements() {
+ var inspector = new Slime().setArray();
+ inspector.addString("foo");
+ inspector.addString("bar");
+ var items = SlimeStream.fromArray(inspector, Inspector::asString).collect(Collectors.toList());
+ assertEquals(List.of("foo", "bar"), items);
+ }
+}