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

Collection et Stream Java Discussion :

Parcourir Map<Object, List<Object>>


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 137
    Points : 65
    Points
    65
    Par défaut Parcourir Map<Object, List<Object>>
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Map<Object, List<GarantieBeneficiaire>> groups = listGar.stream().collect(Collectors.groupingBy(s -> s.getBeneficiaire().getId()));
    Je voudrais parcourir groups comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          listGar.stream().map(e -> {
    		return mapper.map(e, BeneficiaireUI.class);
     
    		}).forEach(e -> response.addToBeneficiaires((BeneficiaireUI) e));

    Merci d'avance

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    D'abord obtiens une Collection de toutes les valeurs de la Map :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collection<List<GarantieBeneficiaire>> valeurs = groups.values();
    Puis appelle stream() dessus comme avec n'importe quelle autre collection.

    Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    groups.values().stream().map(list -> {
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 137
    Points : 65
    Points
    65
    Par défaut
    Merci pour votre réponse mais j'ai déjà fait la même chose mais ça me retourne des valeurs null alors qu'au niveau du log, ça affiche les valeurs attendues.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    List<GarantieBeneficiaire> listGar=service.listGanrantie(adhesion.getId());
    		Map<Object, List<GarantieBeneficiaire>> groups = listGar.stream().collect(Collectors.groupingBy(s -> s.getBeneficiaire().getId()));
    		LOG.info("groups.size() :{}", groups.size()); 
    	    List<List<GarantieBeneficiaire>> subSets = new ArrayList<List<GarantieBeneficiaire>>(groups.values());
    	    LOG.info("subSets :{}", subSets.size());
    Peut-être que le problème est au niveau du mapper?
    Je suis nouvelle en Java 8.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    subSets.stream().map(e -> {
    //	    	e.setDateDebutValiditeAdhGar(minDate);
    //	    	e.setDateFinValiditeAdhGar(maxDate);
    		return mapper.map(e, BeneficiaireUI.class);
     
    		  }).forEach(e -> response.addToBeneficiaires((BeneficiaireUI) e));
    		return new ResponseEntity<>(response, HttpStatus.OK);
     
    	}
    J'ai essayé comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    groups.values().stream().forEach(System.out::println);
    ça retourne la liste initiale non groupée

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    J'en doute. On peut voir le code entier ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 137
    Points : 65
    Points
    65
    Par défaut
    Bonjour, voici le code, c'est un petit controller:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    List<GarantieBeneficiaire> listGar=service.listGanrantie(adhesion.getId());
    		     Map<Object, List<GarantieBeneficiaire>> groups = listGar.stream().collect(Collectors.groupingBy(s -> s.getBeneficiaire().getId()));
    		     LOG.info("groups.size() :{}", groups.size());
                         List<List<GarantieBeneficiaire>> valeurs = groups.values();
    	    LOG.info("valeurs :{}", valeurs.size()); 
     
    	    for (Map.Entry<Object, List<GarantieBeneficiaire>> entry : groups.entrySet()) {
    	    	LOG.info("entry.getKey() :{}",entry.getKey());
    	    	LOG.info("entry.getValue() :{}",entry.getValue());
    	    }
     
    	   	for (List<GarantieBeneficiaire> list : valeurs) {
    	    	LOG.info("subSets benef :{}", list.get(0).getBeneficiaire().getId()); 
    	    	maxDate = list.stream().map(GarantieBeneficiaire::getDateFinValiditeAdhGar).max(Date::compareTo).get();
    	    	LOG.info("subSets maxDate :{}", maxDate); 
    	    	minDate = list.stream().map(GarantieBeneficiaire::getDateDebutValiditeAdhGar).min(Date::compareTo).get();
    	    	LOG.info("subSets minDate :{}", minDate); 
    	       }
                   valeurs.stream().map(e -> {
    //	    	e..setDateDebutValiditeAdhGar(minDate);
    //	    	e.setDateFinValiditeAdhGar(maxDate);
    		return mapper.map(e, BeneficiaireUI.class);
     
    		  }).forEach(e -> response.addToBeneficiaires((BeneficiaireUI) e));
    		return new ResponseEntity<>(response, HttpStatus.OK);
    Pour BeneficiaireListResponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public List<BeneficiaireUI> beneficiaires;
                public List<BeneficiaireUI> getBeneficiaires() {
        return beneficiaires();
      }
        public void setBeneficiaires(List<BeneficiaireUI> beneficiaires) {
        this.beneficiaires = beneficiaires;
      }
    protected List<BeneficiaireUI> beneficiaires() {
        if (beneficiaires == null) {
          beneficiaires = Lists.newArrayList();
        }
        return beneficiaires;
      }
    public void addToBeneficiaires(BeneficiaireUI beneficiaireUI) {
        if (beneficiaireUI != null) {
          beneficiaires().add(beneficiaireUI);
        }
      }
    @Override
      public String toString() {
        return "BeneficiaireListResponse [beneficiaires=" + beneficiaires + "]";
      }

Discussions similaires

  1. Comment envoyer une Map<String, Object> à un web service?
    Par daydream123 dans le forum Services Web
    Réponses: 2
    Dernier message: 16/02/2015, 17h43
  2. List<Map<String, Object>> en List<User>
    Par scrutin dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 14/12/2012, 19h06
  3. utiliser Map<Object, Map<String, Object>>
    Par router_ dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 26/07/2010, 09h44
  4. Bouton Parcourir avec Business Objects
    Par TomDuBouchon dans le forum Général VBA
    Réponses: 0
    Dernier message: 15/07/2010, 15h07
  5. Mapping type - object
    Par bolhrak dans le forum C++
    Réponses: 3
    Dernier message: 17/08/2006, 14h54

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