1 réponse
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 005
Modifié le 9 janv. 2019 à 23:05
Modifié le 9 janv. 2019 à 23:05
(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
9 janv. 2019 à 23:23
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; } } }10 janv. 2019 à 08:31
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())); }10 janv. 2019 à 18:00