Java 如何循环每一行,计算差异,然后平均每一行?
我有一个名为Client的模型,它有以下信息:Java 如何循环每一行,计算差异,然后平均每一行?,java,spring,spring-boot,Java,Spring,Spring Boot,我有一个名为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; privat
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;
我试图实现的是:
对于每个获得第一个结果和最后一个结果分数的用户,请找出差异。
然后平均每个人的差异。
如何编写计算它的函数
客户端返回所有结果的列表,然后
差异:结果[last]-结果[0]
然后是一个循环:
for (int i=0; i <= client.count(); i++)
difference = results[last] - results[0];
sum += difference;
average = sum/client.count();`
你可以这样做:
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));
非常感谢你!!这将返回一个结果。但如果我可以问一下,例如,如果我有6个客户,其中只有3个客户的结果超过2个。Collectors.averagingDouble,它是否计算所有分数的平均值Diff除以6个客户端?@MonnIca是的,这包括结果少于2个的客户端。如果要忽略它们,请使用
过滤器
操作符。我用另一个被忽略的例子更新了答案。这太完美了!非常感谢你!!
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));
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));