> 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.