mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-12 05:35:31 +00:00
performance improvement by re-using total points calculation for net points in comparator
Change-Id: I92a0fdf5270414d05465fbb3a6101e11dc736a3b
This commit is contained in:
1 parent
a20495553c
commit
c2e66b24e4
3 files changed
+22
-3
No files matched your search
@@ -5,6 +5,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
@@ -539,6 +540,15 @@ public interface Leaderboard extends LeaderboardBase, HasRaceColumns {
|
||||
Double getNetPoints(Competitor competitor, RaceColumn raceColumn, TimePoint timePoint,
|
||||
Set<RaceColumn> discardedRaceColumns);
|
||||
|
||||
/**
|
||||
* Same as {@link #getNetPoints(Competitor, RaceColumn, TimePoint, Set)}, only that a supplier for
|
||||
* the total points for the {@code competitor} in column {@code raceColumn} at time point {@code timePoint}
|
||||
* is provided. This helps if a caller also needs to determine the total points anyway, saving redundant
|
||||
* calculations.
|
||||
*/
|
||||
Double getNetPoints(Competitor competitor, RaceColumn raceColumn, TimePoint timePoint,
|
||||
Set<RaceColumn> discardedRaceColumns, Supplier<Double> totalPointsProvider);
|
||||
|
||||
TimePoint getNowMinusDelay();
|
||||
|
||||
/**
|
||||
|
||||
+8
-1
@@ -13,6 +13,7 @@ import java.util.Set;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
@@ -466,11 +467,17 @@ public abstract class AbstractSimpleLeaderboardImpl extends AbstractLeaderboardW
|
||||
@Override
|
||||
public Double getNetPoints(Competitor competitor, RaceColumn raceColumn, TimePoint timePoint,
|
||||
Set<RaceColumn> discardedRaceColumns) {
|
||||
return getNetPoints(competitor, raceColumn, timePoint, discardedRaceColumns, ()->getTotalPoints(competitor, raceColumn, timePoint));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getNetPoints(Competitor competitor, RaceColumn raceColumn, TimePoint timePoint,
|
||||
Set<RaceColumn> discardedRaceColumns, Supplier<Double> totalPointsProvider) {
|
||||
Double result;
|
||||
if (isDiscarded(competitor, raceColumn, timePoint, discardedRaceColumns)) {
|
||||
result = 0.0;
|
||||
} else {
|
||||
final Double totalPoints = getTotalPoints(competitor, raceColumn, timePoint);
|
||||
final Double totalPoints = totalPointsProvider.get();
|
||||
if (totalPoints == null) {
|
||||
result = null;
|
||||
} else {
|
||||
|
||||
+4
-2
@@ -94,8 +94,10 @@ public class LeaderboardTotalRankComparator implements Comparator<Competitor> {
|
||||
this.discardedRaceColumnsPerCompetitor.put(competitor, discardedRaceColumns);
|
||||
for (RaceColumn raceColumn : raceColumnsToConsider) {
|
||||
Pair<Competitor, RaceColumn> key = new Util.Pair<Competitor, RaceColumn>(competitor, raceColumn);
|
||||
netPointsCache.put(key, leaderboard.getNetPoints(competitor, raceColumn, timePoint, discardedRaceColumns));
|
||||
totalPointsCache.put(key, leaderboard.getTotalPoints(competitor, raceColumn, timePoint));
|
||||
final Double totalPoints = leaderboard.getTotalPoints(competitor, raceColumn, timePoint);
|
||||
netPointsCache.put(key, leaderboard.getNetPoints(competitor, raceColumn, timePoint, discardedRaceColumns,
|
||||
/* total points provider */ ()->totalPoints));
|
||||
totalPointsCache.put(key, totalPoints);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user