API question for point lambdafication

Zhong Yu zhong.j.yu at gmail.com
Tue Feb 19 21:49:14 UTC 2013

On Tue, Feb 19, 2013 at 2:45 PM, Ben Evans
<benjamin.john.evans at gmail.com> wrote:
> Hi,
> I've got my regex point lambdafication patch going against the current
> state of lambda, but now I have an API question I'd like some feedback
> on.
> (Btw, if this is more appropriate for core-libs just let me know, and
> I'll take my carcass over there & bug those guys instead.)
> I currently have this new method on java.util.regex.Pattern:
> public Stream<CharSequence> splitAsStream(final CharSequence input);

`input.subSequence()` can be expensive anyway; in String,
StringBuilder and StringBuffer, the method will copy the chars in
range. Therefore you may as well do the copy yourself to make Strings.

Currently String does not have a constructor like

    public String(CharSequence source, int offset, int count)

maybe it should be added?

Zhong Yu

> This provides a stream of values from the input CharSequence, split
> around occurrences of this pattern.
> However, as the return type of splitAsStream() is
> Stream<CharSequence>, then we need to map stream values back to String
> to be most useful, like this:
>         List<String> out = p.splitAsStream(s)
>                             .map(cs -> cs.toString())
>                             .collect(Collectors.toList());
> So, my question is this - should I continue to use the above
> signature, or should it be:
> public Stream<String> splitAsStream(final CharSequence input);
> This avoids the need for the intermediate map(), which seems like a
> bit of a wart to me.
> Pattern has a vanilla split() method, which returns String[] - so for
> those 2 reasons I'm minded towards the second form.
> Anyone else have any thoughts about this?
> Ben

More information about the core-libs-dev mailing list