你可以这样做:
List clients = clientRepository.findAll();
Double meanDiff = clients.stream()
.map(client -> {
List 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类,所以我假设它有一个Double类型的值字段.
更新:这是另一个例子,但忽略了numberOfResults< 2:
Double meanDiff = clients.stream()
.map(client -> client.getResults())
.filter(results -> results.size() >= 2) //
.map(results -> {
Score first = results.get(0);
Score last = results.get(results.size() - 1);
return last.value - first.value;
})
.collect(Collectors.averagingDouble(it -> it));