Implement CharSequence.chars()

Change-Id: I8ed8283d0604147fc6d6e45eb330578503b58654
diff --git a/user/super/com/google/gwt/emul/java/lang/CharSequence.java b/user/super/com/google/gwt/emul/java/lang/CharSequence.java
index 4286821..302b0c3 100644
--- a/user/super/com/google/gwt/emul/java/lang/CharSequence.java
+++ b/user/super/com/google/gwt/emul/java/lang/CharSequence.java
@@ -15,6 +15,14 @@
  */
 package java.lang;
 
+import static javaemul.internal.InternalPreconditions.checkElement;
+
+import java.util.PrimitiveIterator;
+import java.util.Spliterator;
+import java.util.Spliterators;
+import java.util.stream.IntStream;
+import java.util.stream.StreamSupport;
+
 import javaemul.internal.JsUtils;
 
 import jsinterop.annotations.JsMethod;
@@ -32,6 +40,26 @@
   @Override
   String toString();
 
+  default IntStream chars() {
+    return  StreamSupport.intStream(() -> {
+      PrimitiveIterator.OfInt it = new PrimitiveIterator.OfInt() {
+        int cursor;
+
+        @Override
+        public int nextInt() {
+          checkElement(hasNext());
+          return charAt(cursor++);
+        }
+
+        @Override
+        public boolean hasNext() {
+          return cursor < length();
+        }
+      };
+      return Spliterators.spliterator(it, length(), Spliterator.ORDERED);
+    }, Spliterator.SIZED | Spliterator.SUBSIZED | Spliterator.ORDERED, false);
+  }
+
   // CHECKSTYLE_OFF: Utility methods.
   @JsMethod
   static boolean $isInstance(Object instance) {