Path: csiph.com!news.bbs.geek.nz!.POSTED.agency.bbs.geek.nz!not-for-mail From: Eric Sosman (Eric Sosman) Newsgroups: comp.lang.java.programmer Subject: Re: Can I put a filter into a lambda? Date: Mon, 04 Dec 2017 08:20:38 +1200 Organization: fsxNet Usenet Gateway | bbs.geek.nz/#fsxNet Message-ID: <163292229@f38.n261.z1.binkp.net> References: <4175562947@f38.n261.z1.binkp.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Injection-Info: news.bbs.geek.nz; posting-host="M6YmRdZYyc42DJk0lNlt/X4dpP4dzvceBNabSmESN3E"; logging-data="25937"; mail-complaints-to="abuse@news.bbs.geek.nz" User-Agent: VSoup v1.2.9.47Beta [95/NT] X-Comment-To: Eric Douglas X-MailConverter: SoupGate-Win32 v1.05 Xref: csiph.com comp.lang.java.programmer:37749 On 12/4/2017 8:03 AM, Eric Douglas wrote: > On Friday, December 1, 2017 at 4:28:26 PM UTC-5, Eric Sosman wrote: >> It's not clear what your filter loop is actually doing: >> the RowFilter seems never to be used, and I can't find any >> one-argument include() method in any Java SE (8 or 9) class. >> (You also haven't shown what rowToModelIndex is, but I'll >> guess it's a Collection, possibly List). >> So I'll restate the problem without the table trappings: >> >> 1) If getRowFilter() returns null, you want a List of >> all the values 0 through modelRowCount-1, in order. >> >> 2) If getRowFilter() returns non-null, you want a List >> of the same values, excluding those for which the >> boolean-valued include(int) method returns false. >> >> If that's not the goal, read no further. But if it is >> (or is close enough for jazz), both cases can be written >> more simply: >> >> // Case 1: >> rowModelIndex = IntStream.range(0, modelRowCount) >> .mapToObj(Integer::valueOf) >> .collect(Collectors.toList()); >> >> // Case 2: >> rowModelIndex = IntStream.range(0, modelRowCount) >> .filter((value) -> include(value)) >> .mapToObj(Integer::valueOf) >> .collect(Collectors.toList()); >> >> Final point: If you can't stop worrying about efficiency, >> at the very least stop *guessing* about it! >> > rowToModelIndex is an ArrayList. If it *must* be an ArrayList (and not some other kind of List), you might want to change the last bit to .collect(Collectors.toCollection(ArrayList::new)); Although the toList() method appears to use ArrayList anyhow, it doesn't guarantee to do so -- meaning that it might use some other List in a future Java, or in circumstances I haven't studies (e.g., it might behave differently with a parallel stream). > Milliseconds do count in a row filtering method which executes thousands of times. If performance is important, measure. Don't guess. -- esosman@comcast-dot-net.invalid Eleven hundred forty-three days to go.