【发布时间】:2019-03-04 17:16:47
【问题描述】:
我想使用 java 流对子列表中的元素进行分组和计数。
例如,我有一个 AnswerWithOneCorrectOption 类型的答案,如下所示:
class AnswerWithOneCorrectOption {
Long choiceId;
}
此答案类型只有一个正确选项,存储在“AnswerWithOneCorrectOption.id”中。我正在通过 AnswerWithOneCorrectOption 的列表进行流式传输,根据 id 进行分组并使用以下方法进行计数:
private Map<Long, Long> countChoicesAndGroup(List<AnswerWithOneCorrectOption> answers){
Map<Long, Long> map = answers.parallelStream()
.collect(Collectors.groupingBy(AnswerWithOneCorrectOption::getChoiceId,
Collectors.counting()));
return map;
}
假设我有另一个可以有多个正确选项的答案类型。我将这些选项保存在List<Long> choiceIds 中。
class AnswerWithMultipleCorrectOptions {
List<Long> choiceIds;
}
如何按List<Long> choiceIds 中的choiceId 分组并计数?
【问题讨论】:
-
我不明白你想如何找到“多个”选项。您的意思是要检查
ids的整个列表而不是getId以获得正确答案?它是如何工作的,你能用循环而不是流向我们展示吗? -
你能展示一些示例输入和输出吗?
-
是的。如果用户只选择了一个选项,它将被保存在 answer.id 中。如果他选择了多个答案,我会将其添加到列表 answer.ids 中。我在问题中提到的代码适用于 answer.id。如果我有 answer.ids 而不是 answer.id,我该如何分组和计数?
-
id是否可能在ids中重复?换句话说,id总是与ids中的所有答案不同,还是可能包含在ids的列表中? (顺便说一句,这是一个糟糕的设计。最好只有一个答案列表,如果用户只选择一个,那么列表的长度为 1。) -
你期望什么样的地图?
标签: java java-stream grouping counting