String Spiterator
package name.panitz.util.streams;
import java.util.Spliterator;
import java.util.function.Consumer;
import java.util.stream.StreamSupport;
public class SpliterateString implements Spliterator<Character> {
int i = 0;
int end;
String s;
public SpliterateString(String s) {
this(0, s.length() - 1, s);
}
public SpliterateString(int i, int end, String s) {
this.i = i;
this.end = end;
this.s = s;
}
@Override
public boolean tryAdvance(Consumer<? super Character> action) {
if (i > end)
return false;
action.accept(s.charAt(i++));
return true;
}
@Override
public Spliterator<Character> trySplit() {
int middle = i + (end - i) / 2;
int oldEnd = end;
end = middle;
return new SpliterateString(middle + 1, oldEnd, s);
}
@Override
public long estimateSize() {
return end - i;
}
@Override
public int characteristics() {
return 0;
}
public static void main(String[] args) {
StreamSupport.stream(new SpliterateString("hallo"), false).forEach(x -> System.out.println(x));
System.out.println("und nun parallel");
StreamSupport.stream(new SpliterateString("hallo"), true).forEach(x -> System.out.println(x));
}
}