On Mar 3, 2015, at 3:09 AM, Stuart Marks <[email protected]> wrote:

> On 3/2/15 1:49 AM, Paul Sandoz wrote:
>> On Feb 28, 2015, at 4:40 AM, Xueming Shen <[email protected]> wrote:
>>> Updated to a static private class for the toMatchResult(). Added a private 
>>> field MatchResult for the anonymous MatchResult
>>> wrapper.
>>> 
>>> http://cr.openjdk.java.net/~sherman/regex.stream/src/java.base/share/classes/java/util/regex/Matcher.java.sdiff.html
>>> 
>> 
>> Many thanks, i took most of that code and updated:
>> 
>> http://cr.openjdk.java.net/~psandoz/jdk9/JDK-8071479--Matcher-stream-results/webrev/src/java.base/share/classes/java/util/regex/Matcher.java.sdiff.html
>> 
>> - additional documentation for replacer function parameter is moved to the 
>> main body
>> 
>> - there is no need for an internal MatchResult instance wrapper. It does not 
>> protect against state modification, does not protect against escape, creates 
>> another object for all matcher instances, and results in more wrapping. The 
>> only way we can avoid the first 2 is by using an immutable match result, 
>> which has it's own cost that unfortunately we cannot avoid in the results().
> 
> 
> Even though there's more overhead, I like the idea of creating a distinct 
> match result for each stream value. Consider what might happen if somebody 
> decided to collect the match results into a list at the end of the pipeline.

Right, we cannot avoid it (sequentially or for parallel).


> (Did the earlier versions pass "this" down the stream?

No.


> If so, boy, was that a latent bug.)


> I'm reminded of one of the old Map entrySet iterators that reused the same 
> Map.Entry instance for the duration of the iteration. That caused some 
> problems.
> 

See ServiceLoader :-)


> Anyway, this latest version looks fine.
> 

Thanks!
Paul.

Reply via email to