user1298426:
La cartographie d'un objet à l'autre avec l'agrégation et de regroupement
j'ai un cours
class Q {
String username;
int taskId;
double timediff;
// constructor
}
et je dois le convertir en
class ToQ {
String username;
int noOfTasks;
double sum;
// constructor
}
Ainsi, le groupe est intension par nom d'utilisateur, comptez pas de taskIds, somme de timeDiff.
Liste de cette
List<Q> qs = new ArrayList<>();
qs.add(new Q("tom", 2, 2.0));
qs.add(new Q("tom", 6, 1.0));
qs.add(new Q("harry", 8, 0.03));
Il devrait y avoir de sortie Toq comme
new ToQ("tom",2,3);
new ToQ("harry",1,0.03);
J'ai essayé avec la fonction de regroupement, mais il génère HashMap mais pas sûr de savoir comment convertir en objet.
Map<String, Double> collect = qs
.stream()
.collect(groupingBy(Q::getUsername, summingDouble(Q::getLocalDateTime)));
aussi:
Former un
Vous pouvez le faire comme suit:
Groupe par nom pour TIMEDIFF
Map<String, Double> nameToTimeDiffSumMap = qs.stream()
.collect(Collectors.groupingBy(Q::getUsername,
Collectors.summingDouble(Q::getTimediff)));
Groupe par nom pour le comte
Map<String, Long> nameToCountMap = qs.stream()
.collect(Collectors.groupingBy(Q::getUsername,
Collectors.counting()));
Former un List<ToQ>
List<ToQ> toQS = qs.stream().map(a ->
new ToQ(a.getUsername(), nameToCountMap.get(a.getUsername()), nameToTimeDiffSumMap.get(a.getUsername())))
.collect(toList());
qui suppose que les classes d'avoir des getters et setters et approprié constructeur ainsi
class ToQ {
String username;
long noOfTasks;
double sum;
}
class Q {
String username;
int taskId;
double timediff;
}