diff options
author | Valerij Fredriksen <valerijf@verizonmedia.com> | 2020-05-13 13:23:54 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@verizonmedia.com> | 2020-05-13 13:23:54 +0200 |
commit | bc9ef59674aba48a793c3efc18983cccf21bb651 (patch) | |
tree | f18e1b805f8736d99ca074b63fbe00f5e93defaa /vespajlib | |
parent | 41d4cea790f4779b2b64565b98664c18a13032f1 (diff) |
Add method to convert Slime array to Stream
Diffstat (limited to 'vespajlib')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/slime/SlimeUtils.java | 21 | ||||
-rw-r--r-- | vespajlib/src/test/java/com/yahoo/slime/SlimeUtilsTest.java | 13 |
2 files changed, 34 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/slime/SlimeUtils.java b/vespajlib/src/main/java/com/yahoo/slime/SlimeUtils.java index 2ed7331a60c..5084e6554cb 100644 --- a/vespajlib/src/main/java/com/yahoo/slime/SlimeUtils.java +++ b/vespajlib/src/main/java/com/yahoo/slime/SlimeUtils.java @@ -4,7 +4,12 @@ package com.yahoo.slime; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.util.Iterator; import java.util.Optional; +import java.util.Spliterator; +import java.util.Spliterators; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; /** * Extra utilities/operations on slime trees. @@ -118,4 +123,20 @@ public class SlimeUtils { public static Optional<String> optionalString(Inspector inspector) { return Optional.of(inspector.asString()).filter(s -> !s.isEmpty()); } + + public static Iterator<Inspector> entriesIterator(Inspector inspector) { + return new Iterator<>() { + private int current = 0; + @Override public boolean hasNext() { return current < inspector.entries(); } + @Override public Inspector next() { return inspector.entry(current++); } + }; + } + + /** Returns stream of entries for given inspector. If the inspector is not an array, empty stream is returned */ + public static Stream<Inspector> entriesStream(Inspector inspector) { + int characteristics = Spliterator.NONNULL | Spliterator.SIZED | Spliterator.ORDERED; + return StreamSupport.stream( + Spliterators.spliteratorUnknownSize(entriesIterator(inspector), characteristics), + false); + } } diff --git a/vespajlib/src/test/java/com/yahoo/slime/SlimeUtilsTest.java b/vespajlib/src/test/java/com/yahoo/slime/SlimeUtilsTest.java index 237b1575bfb..5757202aaf1 100644 --- a/vespajlib/src/test/java/com/yahoo/slime/SlimeUtilsTest.java +++ b/vespajlib/src/test/java/com/yahoo/slime/SlimeUtilsTest.java @@ -5,6 +5,8 @@ import com.yahoo.text.Utf8; import org.junit.Test; import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertEquals; @@ -97,4 +99,15 @@ public class SlimeUtilsTest { } } + @Test + public void test_stream() { + String json = "{\"constant\":0,\"list\":[1,2,4,3,0],\"object\":{\"a\":1,\"c\":3,\"b\":2}}"; + Inspector inspector = SlimeUtils.jsonToSlimeOrThrow(json).get(); + assertEquals(0, SlimeUtils.entriesStream(inspector.field("constant")).count()); + assertEquals(0, SlimeUtils.entriesStream(inspector.field("object")).count()); + + assertEquals(List.of(1L, 2L, 4L, 3L, 0L), + SlimeUtils.entriesStream(inspector.field("list")).map(Inspector::asLong).collect(Collectors.toList())); + } + } |