我有一个名为 Client 的模型,其中包含以下信息:
private Long int;
@OneToMany(mappedBy = "client", cascade = CascadeType.ALL)
private List<Results> results;
模型结果有这些信息:
@ManyToOne
@JoinColumn(name='client_id')
private Client client;
@OneToOne
private Scores score;
private Date submittedDate;
我想要实现的是:
对于每个用户得到他们第一个结果的分数和最后一个结果的分数,找出差异。 然后平均出每个人的差异。 我该如何编写计算它的函数?
Client返回所有结果的列表,然后for 区别:结果[最后] - 结果[0] 然后是一个循环:
for (int i=0; i <= client.count(); i++)
difference = results[last] - results[0];
sum += difference;
average = sum/client.count();`
我很难将其转换为在 Spring 中运行的代码。 我是否将其写在 ClientServiceImplementation 中,然后在 ClientRepository 中进行查询? 任何帮助表示赞赏!!!
Score 类有:
private Long id;
private Double score;
最佳答案
你可以这样做:
List<Client> clients = clientRepository.findAll();
Double meanDiff = clients.stream()
.map(client -> {
List<Result> results = client.getResults();
if (results.size() >= 2) {
Score first = results.get(0);
Score last = results.get(results.size() - 1);
return last.value - first.value;
} else {
return 0.0;
}
})
.collect(Collectors.averagingDouble(it -> it));
注意:您没有指定 Score
是什么类,所以我假设它有一个 value
类型字段 Double
.
更新:这是另一个示例,但忽略了 numberOfResults < 2
的客户端:
Double meanDiff = clients.stream()
.map(client -> client.getResults())
.filter(results -> results.size() >= 2) // <-- keep these only
.map(results -> {
Score first = results.get(0);
Score last = results.get(results.size() - 1);
return last.value - first.value;
})
.collect(Collectors.averagingDouble(it -> it));
关于java - 如何遍历每一行,计算差异然后对所有内容进行平均?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47365852/