IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Lambda qui filtre en fonction des enfants


Sujet :

Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Points : 127
    Points
    127
    Par défaut Lambda qui filtre en fonction des enfants
    Bonjour,

    Je souhaite avoir votre avis sur une fonction que j'ai faite.

    J'ai une Entité Event qui contient une liste de Band qui elle même contient une liste de Member

    Je dois filtrer une liste d'Event et ne renvoyé que ceux qui contiennent des Band ayant au moins un Membre portant le nom donné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     public List<Event> getFilteredEventsInJava(String query) {
            final List<Event> events = eventRepository.findAllBy().stream().filter(e -> e.getBands().stream().filter(b -> b.getMembers().stream().filter(m -> m.getName().contains(query)).count()>0).count()>0).collect(Collectors.toList());
            if(StringUtils.isEmpty(query)) {
                return Collections.EMPTY_LIST;
            }
            return events;
        }

    eventRepository.findAllBy()
    retourne tout les events de la BDD ensuite je filtre pour n'avoir que les event qui contiennent au moins un Band (count >0) contenant au moins un Member ayant le nom passé en paramètre (m -> m.getName().contains(query)).

    Cette façon de faire me parait compliqué, en plus si une des liste est null j'ai peur qu'il y ait une exception de lancé.

    Est-ce que vous avez une idée pour améliorer ce code?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Points : 127
    Points
    127
    Par défaut
    Je viens de faire une autre version en ajoutant des Optional pour gérer les null mais c'est encore moins lisible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    final List<Event> events2 = Optional.ofNullable(eventRepository.findAllBy()).orElseGet(Collections::emptyList).stream()
                    .filter(e -> Optional.ofNullable(e.getBands()).orElseGet(Collections::emptySet).stream()
                            .filter(b ->  Optional.ofNullable(b.getMembers()).orElseGet(Collections::emptySet).stream().
                                    filter(m -> m.getName().contains(query)).count()>0).count()>0)
                    .collect(Collectors.toList());

Discussions similaires

  1. [XL-365] EXCEL : LAMBDA, la fonction qui permet de créer des fonctions
    Par Pierre Fauconnier dans le forum Excel
    Réponses: 16
    Dernier message: 01/02/2023, 19h20
  2. selection noeud en fonction des enfants
    Par jessi55 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 07/02/2022, 10h47
  3. Activer des filtres en fonction des Report Parameters
    Par Mrlaurent90 dans le forum BIRT
    Réponses: 5
    Dernier message: 05/04/2011, 09h31
  4. Une fonction qui permette d'ajouter des séparateurs...
    Par Empty_body dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/04/2006, 13h23
  5. Variable qui évolue en fonction des choix dans formulaire
    Par stefou007 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/09/2005, 22h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo