diff --git a/spectator-api/src/main/java/com/netflix/spectator/api/TagList.java b/spectator-api/src/main/java/com/netflix/spectator/api/TagList.java index 76eec3974..3f93b8c7c 100644 --- a/spectator-api/src/main/java/com/netflix/spectator/api/TagList.java +++ b/spectator-api/src/main/java/com/netflix/spectator/api/TagList.java @@ -20,6 +20,8 @@ import java.util.List; import java.util.Map; import java.util.NoSuchElementException; +import java.util.Spliterator; +import java.util.Spliterators; import java.util.function.BiConsumer; import java.util.function.BiPredicate; import java.util.function.Predicate; @@ -116,4 +118,9 @@ default void forEach(BiConsumer consumer) { return size() - other.size(); } } + + @Override + default Spliterator spliterator() { + return Spliterators.spliterator(iterator(), size(), Spliterator.ORDERED); + } } diff --git a/spectator-api/src/test/java/com/netflix/spectator/api/DefaultIdTest.java b/spectator-api/src/test/java/com/netflix/spectator/api/DefaultIdTest.java index e5dd76fb5..93797f2bc 100644 --- a/spectator-api/src/test/java/com/netflix/spectator/api/DefaultIdTest.java +++ b/spectator-api/src/test/java/com/netflix/spectator/api/DefaultIdTest.java @@ -28,6 +28,7 @@ import java.util.Map; import java.util.Random; import java.util.Set; +import java.util.Spliterator; public class DefaultIdTest { @@ -384,4 +385,14 @@ public void unsafeCreateDuplicates() { Id expected = Id.create("foo").withTags("k1", "_", "k1", "v1", "k2", "v2"); Assertions.assertEquals(expected, id); } + + @Test + public void spliteratorSizeAndCharacteristics() { + Id id = Id.create("foo").withTags("k1", "v1", "k2", "v2"); + Spliterator spliterator = id.spliterator(); + + Assertions.assertTrue(spliterator.hasCharacteristics(Spliterator.ORDERED)); + Assertions.assertTrue(spliterator.hasCharacteristics(Spliterator.SIZED)); + Assertions.assertEquals(3, spliterator.getExactSizeIfKnown()); + } }