【发布时间】:2020-08-06 19:18:30
【问题描述】:
我有 TrainingRequest 列表,其中每个元素都有 Feedback 列表。
@Data
class TrainingRequest{
@Transient
List<Feedack> feedback;
}
@Data
class Feedback{
String Q1;
String Q2;
}
我需要获取 Q1、Q2 的所有给定结果并计算每个值的百分比。
List<TrainingRequest> trainingList = Optional.ofNullable(trainingRequestList).orElseGet(Collections::emptyList)
.stream().map(m -> {
List<Feedback> feedback = findByTrainingRequestId(m.getId());
m.setFeedback(feedback); // assigning Feedack to TrainingRequest
return m;
}).collect(Collectors.toList());
平所有反馈
List<Feedback> flatMap = trainingList.stream().flatMap(f -> f.getFeedback().stream()).collect(Collectors.toList());
为了计算 Q1 和 Q2 的每个值,我将其分组并获取计数。我需要获取每个 Q1、Q2 值的百分比。
Map<String, Map<String, Long>> map = new TreeMap<>();
map.put("Q1", flatMap.stream().collect(Collectors.groupingBy(Feedback::getQ1, Collectors.counting())));
map.put("Q2", flatMap.stream().collect(Collectors.groupingBy(Feedback::getQ2, Collectors.counting())));
当我使用Collectors.counting() 时,它会给出以下输出:
{
"Q1": {
"unsatisfied": 2,
"Satisfied": 1,
"satisfied": 1
},
"Q2": {
"Yes": 4
}
}
但我需要它按照我的预期给出百分比
{
"Q1": {
"unsatisfied": 50 %,
"Satisfied": 25 %,
"satisfied": 25 %
},
"Q2": {
"Yes": 100 %
}
}
如何以有效的方式做到这一点?上面的代码需要优化吗?
【问题讨论】:
-
我对你发布的代码 sn-ps 有点困惑,你有一个完整的例子,我可以直接转储到 IDE 中运行吗?
-
我正在从数据库中获取数据,这就是我实现和正常工作的方式。我认为你可以这样做
标签: java spring spring-boot collections java-stream