Como elementos do grupo e contar em uma sublista usando fluxos java

Kiran Pabbu:

Quero elementos do grupo e contar em uma lista sub usando fluxos java.

Por exemplo, eu tenho uma resposta do tipo AnswerWithOneCorrectOption que se parece com:

class AnswerWithOneCorrectOption {
     Long choiceId;
}

Este tipo de resposta tem apenas uma opção correta e é armazenado em "AnswerWithOneCorrectOption.id". Estou fluindo através de uma lista de AnswerWithOneCorrectOption de, agrupamento com base na identificação e contagem usando:

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

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

 return map;
}

Suponha que eu tenho um outro tipo de resposta que pode ter várias opções corretas. Estou guardando essas opções em List<Long> choiceIds.

class AnswerWithMultipleCorrectOptions {
     List<Long> choiceIds;
}

Como posso grupo por choiceId de em List<Long> choiceIdse contar?

Ruslan:

Se o usuário escolher apenas uma opção, ele será salvo em answer.id. Se ele escolher mais de uma resposta, eu vou adicioná-lo à lista answer.ids.

É provavelmente melhor para uso Answercom List<Long> idssomente. E no caso de usuário escolheu apenas uma opção que você só vai ter lista com um elemento. É o que lhe permite agrupar por resposta (não se esqueça sobre igual / hashCode) ambos os casos:

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

Mas se você deseja agrupar por List<Long>isso pode ser feito da mesma maneira:

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

Atualização : agrupar por elementos da lista sub você pode usar flatMapantes:

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

Acho que você gosta

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