Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Robert Klemme Newsgroups: comp.lang.java.programmer Subject: Re: stream filter twice Date: Sun, 21 Feb 2016 12:58:18 +0100 Lines: 65 Message-ID: References: <04334e10-3bad-49dc-87d8-dc2f00f90807@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable X-Trace: individual.net XS7Kaz/qTDpWDBlyw+0lSwx+03NExUkQdpRz5E6u7KK+Z3eLo= Cancel-Lock: sha1:+HXT4Aj/s6KiyolWkKn6omiPpX8= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 In-Reply-To: Xref: csiph.com comp.lang.java.programmer:33858 On 21.02.2016 04:20, Arne Vajh=C3=B8j wrote: > What is your goal? To produce easily understandable code? To save > a few micro seconds? That is really the first question to answer. > If the first then I think you current code is fine. > > If the second then you will need to be creative. > > Here is my attempt to be creative: I'm a bit more old fashioned, maybe that's why I do not find the=20 advantage of streams so big here. I was also considering, we might not=20 know how large the initial collection is. So the cost of iterating=20 twice could be significant. So: public static List test_2(final Collection=20 myclasscollection) { final List x =3D new ArrayList<>(); final List y =3D new ArrayList<>(); for (final myClass i : myclasscollection) { if (i.filter()) x.add(i); else if (i.anotherfilter()) // "else" is optimization! y.add(i); } if (!x.isEmpty()) { return x; } else if (!y.isEmpty()) { return y; } else return new ArrayList<>(myclasscollection); } public static List test_3(final Collection=20 myclasscollection) { final List x =3D new ArrayList<>(); final List y =3D new ArrayList<>(); for (final myClass i : myclasscollection) { if (i.filter()) x.add(i); else if (i.anotherfilter()) // "else" is optimization! y.add(i); } return x.isEmpty() ? (y.isEmpty() ? new ArrayList<>(myclasscollection) : y) : x; } Note: formatting suffered a bit. Kind regards robert --=20 remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/