Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何循环每一行,计算差异,然后平均每一行?_Java_Spring_Spring Boot - Fatal编程技术网

Java 如何循环每一行,计算差异,然后平均每一行?

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

我有一个名为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;
我试图实现的是:

对于每个获得第一个结果和最后一个结果分数的用户,请找出差异。 然后平均每个人的差异。 如何编写计算它的函数

客户端返回所有结果的列表,然后 差异:结果[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));