Dynamic filtering conditions in Lambda

Millies, Sebastian Sebastian.Millies at softwareag.com
Sat Oct 12 11:59:35 PDT 2013


but one shouldn't get sidetracked by the beauty of a solution. That algorithm
requires n*m effort. Wouldn't it be better use HashSet for the criteria, and filter
like this: names.stream.filter(n->startsWith.contains(n.charAt(0))), and similarly
for lengths, which would be O(n).
-- Sebastian

> -----Original Message-----
> From: lambda-dev-bounces at openjdk.java.net [mailto:lambda-dev-
> bounces at openjdk.java.net] On Behalf Of Daniel Sachse
> Sent: Saturday, October 12, 2013 8:03 AM
> To: Brian Goetz
> Cc: lambda-dev at openjdk.java.net
> Subject: Re: Dynamic filtering conditions in Lambda
>
> Wow nice! That was easier than I thought!
> Lambdas are AWESOME! :)
>
> --
>
> Wombat Software Technologies UG (haftungsbeschränkt)
> Im MediaPark 5
> D-50670 Köln
>
> Geschäftsführer: Daniel Sachse, Jacob Pawlik
> Unternehmenssitz: Köln
> Handelsregister beim Amtsgericht: Köln
> Handelsregister-Nummer: HRB 79316
>
> Web: http://www.wombatsoftware.de
> Email: mail at wombatsoftware.de
> Tel.: 0221/16905638
> Mobil: 01578/4922886
>
>
> 2013/10/12 Brian Goetz <brian.goetz at oracle.com>
>
> > How about:
> >
> >   name.stream()
> >       .filter(n -> startsWith.stream().anyMatch(s -> n.startsWith(s)))
> >       ...
> >
> >
> > On 10/11/2013 6:25 PM, Daniel Sachse wrote:
> >
> >> Hey guys,
> >>
> >> I having the following working Java 8 code:
> >>
> >> List<String> names = Arrays.asList("Ben", "Brad", "Bill", "Kim", "Kara",
> >> "Sam", "Sara", "Jil", "Brenda");
> >>
> >> List<String> result = names.stream().filter(name -> name.startsWith("K"))
> >>
> >>                  .filter(name -> name.length() == 3)
> >>                  .collect(toList());
> >>
> >> ============
> >>
> >> Now I change it to use multiple possible first letters and lenghts:
> >>
> >> List<String> result = names.stream().filter(name -> name.startsWith("K")
> >> ||
> >> name.startsWith("B"))
> >>
> >>                  .filter(name -> name.length() == 3 || name.length() == 4)
> >>                  .collect(toList());
> >>
> >>
> >> ============
> >>
> >> Now I want to rewrite this and use a dynamic list of starting letters and
> >> a
> >> dynamic list of length attributes, but I totally got stuck on how to
> >> implement this :
> >>
> >> List<String> names = Arrays.asList("Ben", "Brad", "Bill", "Kim", "Kara",
> >> "Sam", "Sara", "Jil", "Brenda");
> >>
> >> *List<String> *startsWith* = Arrays.asList("B", "K", "S");*
> >> *List<Integer> *length* = Arrays.asList(2, 3, 4);*
> >>
> >>
> >> List<String> result = names.stream().
> >> // Filters missing
> >>
> >>                  .collect(toList());
> >>
> >>
> >> ============
> >>
> >> I would be really glad if you could provide me with a solution how this
> >> could be implemented using Lambdas :)
> >>
> >>
> >> Thanks in advance!
> >>
> >> Daniel
> >>
> >> --
> >>
> >>
> >> Wombat Software Technologies UG (haftungsbeschränkt)
> >> Im MediaPark 5
> >> D-50670 Köln
> >>
> >> Geschäftsführer: Daniel Sachse, Jacob Pawlik
> >> Unternehmenssitz: Köln
> >> Handelsregister beim Amtsgericht: Köln
> >> Handelsregister-Nummer: HRB 79316
> >>
> >> Web: http://www.wombatsoftware.de
> >> Email: mail at wombatsoftware.de
> >> Tel.: 0221/16905638
> >> Mobil: 01578/4922886
> >>
> >>


Software AG – Sitz/Registered office: Uhlandstraße 12, 64297 Darmstadt, Germany – Registergericht/Commercial register: Darmstadt HRB 1562 - Vorstand/Management Board: Karl-Heinz Streibich (Vorsitzender/Chairman), Dr. Wolfram Jost, Arnd Zinnhardt; - Aufsichtsratsvorsitzender/Chairman of the Supervisory Board: Dr. Andreas Bereczky - http://www.softwareag.com



More information about the lambda-dev mailing list