La cartographie d'un objet à l'autre avec l'agrégation et de regroupement

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:

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;
}

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=233233&siteId=1
conseillé
Classement