Probleme map stream
jesuisunpseudo
-
jesuisunpseudo -
jesuisunpseudo -
Bonjour,
Me revoila avec un petit soucis donc je ne trouve pas la solution.
J'ai donc une map avec des votes par date et je dois renvoyer en une stream avec les dates et le nombre de votes par date en fonction du type de vote en parametre. J'ai essayé plusieurs choses donc la dernière en date ci-dessous qui ne compile même pas mais je ne sais pas dutout vers ou aller.. si quelqu'un à une idée je suis prenant
Merci
Me revoila avec un petit soucis donc je ne trouve pas la solution.
J'ai donc une map avec des votes par date et je dois renvoyer en une stream avec les dates et le nombre de votes par date en fonction du type de vote en parametre. J'ai essayé plusieurs choses donc la dernière en date ci-dessous qui ne compile même pas mais je ne sais pas dutout vers ou aller.. si quelqu'un à une idée je suis prenant
Map<LocalDateTime, Set<Vote>> votes = new TreeMap<>();
public Map<LocalDateTime, Integer> nombreVotants(TypeVote typeVote) {
return votes.values().stream().filter(v -> v.getTypeVote(typeVote))
.collect(Collectors.groupingBy(Function.identity(), Integer.valueOf(Collectors.counting().toString()));
Merci
Configuration: Windows / Chrome 71.0.3578.98
A voir également:
- Probleme map stream
- Google map satellite gratuit - Guide
- Ace stream - Télécharger - Lecture
- Popcorn stream - Télécharger - TV & Vidéo
- Google map ma position - Guide
- Telecharger carte google map - Guide
1 réponse
(Re)Bonjour,
Essayes de nous donner un maximum de détail sur ton problème quand tu postes, par exemple ici en nous donnant le code de tes classes Vote et TypeVote, pour toi ça ne coûte qu'un copier-coller mais sans ça nous il faudrait réécrire tout depuis le début pour obtenir quelque chose qui sera différent de toi...
De plus, un bon exemple ça fait toujours du bien pour comprendre ta question, parce que "une stream avec les dates et le nombre de votes par date en fonction du type de vote en parametre" c'est pas évident.
Pour traiter des Map avec les stream tu peux l'exploser en Set<Entry> via la méthode entrySet() puis la recomposer à la fin avec Collectors.toMap
Essayes de nous donner un maximum de détail sur ton problème quand tu postes, par exemple ici en nous donnant le code de tes classes Vote et TypeVote, pour toi ça ne coûte qu'un copier-coller mais sans ça nous il faudrait réécrire tout depuis le début pour obtenir quelque chose qui sera différent de toi...
De plus, un bon exemple ça fait toujours du bien pour comprendre ta question, parce que "une stream avec les dates et le nombre de votes par date en fonction du type de vote en parametre" c'est pas évident.
Pour traiter des Map avec les stream tu peux l'exploser en Set<Entry> via la méthode entrySet() puis la recomposer à la fin avec Collectors.toMap
class DoodleImpl implements Doodle { private String nom; Map<LocalDateTime, Set<Vote>> votes = new TreeMap<>(); public DoodleImpl() { } public DoodleImpl(String nom) { this.nom = nom; } @Override public void setNom(String nom) { this.nom = nom; } /* * La méthode renvoie par date le nombre de votes obtenus pour le type de * disponibilité reçu en paramètre. Cette méthode doit s'écrire avec une stream * (1 seule instruction). */ @Override public Map<LocalDateTime, Integer> nombreVotants(TypeVote typeVote) { return votes.values().stream().filter(v -> v.getTypeVote(typeVote)) .collect(Collectors.groupingBy(Function.identity(), Integer.valueOf(Collectors.counting().toString())); @Override public String toString() { String ret = ""; Set<LocalDateTime> set = votes.keySet(); for (LocalDateTime localDateTime : set) { ret += localDateTime.toString() + votes.get(localDateTime) + " \n"; } return ret; } // class interne public class Vote { private String nomVotant; private TypeVote typeVote; public Vote(String nomVotant, TypeVote typeVote) { super(); this.nomVotant = nomVotant; this.typeVote = typeVote; } public String getNomVotant() { return nomVotant; } public TypeVote getTypeVote() { return typeVote; } public void setNomVotant(String nomVotant) { this.nomVotant = nomVotant; } public void setTypeVote(TypeVote typeVote) { this.typeVote = typeVote; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + getOuterType().hashCode(); result = prime * result + ((nomVotant == null) ? 0 : nomVotant.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Vote other = (Vote) obj; if (!getOuterType().equals(other.getOuterType())) return false; if (nomVotant == null) { if (other.nomVotant != null) return false; } else if (!nomVotant.equals(other.nomVotant)) return false; return true; } @Override public String toString() { return nomVotant + " > " + typeVote.getDisponibilite(); } private Doodle getOuterType() { return DoodleImpl.this; } } // enum interne public enum TypeVote { DISPO("Disponible"), PAS_DISPO("Indisponible"), PEUT_ETRE("Non défini"); private String disponibilite; private TypeVote(String disponibilite) { this.disponibilite = disponibilite; } public String getDisponibilite() { return disponibilite; } } }public Map<LocalDateTime, Integer> nombreVotants(TypeVote typeVote) { return votes.entrySet().stream().collect(Collectors.toMap(Entry::getKey, e -> (int) e.getValue().stream().map(Vote::getTypeVote).filter(t -> t == typeVote).count())); }