> On Jun 7, 2018, at 1:42 PM, Jim Laskey <james.las...@oracle.com> wrote:
> 
>> On Jun 7, 2018, at 1:39 PM, Guy Steele <guy.ste...@oracle.com 
>> <mailto:guy.ste...@oracle.com>> wrote:
>> 
>>> On Jun 7, 2018, at 9:11 AM, Jim Laskey <james.las...@oracle.com 
>>> <mailto:james.las...@oracle.com>> wrote:
>> . . .
>> The name “lines” is similarly uninformative, and the LinesOptions business 
>> seems kind of clunky: useful if we expect to be “computing lines options”, 
>> but if not, I would rather see
>> 
>>         System.out.println(`
>>            abc
>>            def
>>            ghi
>>         `.removeOneLeadingBlankLine().removeOneTrailingBlankLine().count());
>> 
>> and other available methods are
>> 
>>      removeAllLeadingBlankLines()
>>      removeAllTrailingBlankLines()
>>      removeAllSurroundingBlankLines()
>>      removeAllBlankLines()
>> 
>> which I think would cover 99.9% of uses.
> 
> Any shorter naming options?

Sure: remove the word “All” from those last four names.  Too bad we don;t have 
a single word for “Blank Line”.

> Assuming you are returning Strings, this would be costly (string copying), 
> but reasonable.

I was relying on your earlier assertion that in most cases there 
transformations get done at compile time . . .
> 
> If you are returning Stream<String>, first and last combinators really suck 
> with streams. That is, you have to make full passes with each call.

. . . but, d’oh!  I forgot that streams are involved here.  “Never mind.”  So 
you really would need individual methods, and that’s pushing the number of 
methods pretty high.
> 
> Internally, I have it implemented as .lines(int maxLeadingBlanksRemoved, int 
> maxTrailingBlanksRemoved)
> 
>         System.out.println(`
>            abc
>            def
>            ghi
>         `.lines(1,1)).count();
> 
> This keeps everything single pass.


Reply via email to