Como elementos del grupo y contar en una lista secundaria utilizando flujos de java

Kiran Pabbu:

Quiero elementos del grupo y contar en una lista de sub usando corrientes de Java.

Por ejemplo, tengo una respuesta de tipo AnswerWithOneCorrectOption que se parece a:

class AnswerWithOneCorrectOption {
     Long choiceId;
}

Este tipo de respuesta tiene una única opción correcta y se almacena en "AnswerWithOneCorrectOption.id". Estoy streaming a través de una lista de AnswerWithOneCorrectOption de, la agrupación en base a ello y contando usando:

private Map<Long, Long> countChoicesAndGroup(List<AnswerWithOneCorrectOption> answers){

Map<Long, Long> map = answers.parallelStream()
             .collect(Collectors.groupingBy(AnswerWithOneCorrectOption::getChoiceId, 
 Collectors.counting())); 

 return map;
}

Supongamos que tengo otro tipo de respuesta que puede tener múltiples opciones correctas. Estoy ahorrando esas opciones en List<Long> choiceIds.

class AnswerWithMultipleCorrectOptions {
     List<Long> choiceIds;
}

¿Cómo puede el grupo I por choiceId de en List<Long> choiceIdsy contar?

Ruslan:

Si el usuario escogió sólo una opción, que se guardará en answer.id. Si elige más de una respuesta, lo añadiré a la lista answer.ids.

Probablemente es mejor utilizar Answercon List<Long> idssolamente. Y en caso que los usuarios elegir sólo una opción: sólo tendrá lista con un elemento. Se le está permitiendo a la agrupación por la respuesta (no se olvide de iguales / hashcode ambos casos):

Map<Answer, Long> collect = answers.stream()
        .collect(groupingBy(Function.identity(), counting()));

Pero si desea agrupar por List<Long>que se puede hacer de la misma manera:

Map<List<Long>, Long> collect = answers.stream()
            .collect(groupingBy(Answer::choiceIds, counting()));

Actualización : agrupar por elementos de la lista de sub puede utilizar flatMapantes:

Map<Long, Long> map = answers.stream()
        .flatMap(answer -> answer.getIds().stream())
        .collect(groupingBy(Function.identity(), counting()));

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=214868&siteId=1
Recomendado
Clasificación