♻️ refactor: Remove the maxSpeed and minSpeed properties to optimize the calculation of maximum and minimum speeds.

This commit is contained in:
jarvis2f 2024-12-30 16:49:26 +08:00
parent 913ee64b5c
commit b58e1774a1

View file

@ -11,10 +11,6 @@ public class AvgSpeed {
private final TreeMap<Long, SpeedPoint> speedPoints; private final TreeMap<Long, SpeedPoint> speedPoints;
private long maxSpeed;
private long minSpeed;
private final int smoothingWindowSize; private final int smoothingWindowSize;
/** /**
@ -34,8 +30,6 @@ public class AvgSpeed {
public AvgSpeed(int interval, int smoothingWindowSize) { public AvgSpeed(int interval, int smoothingWindowSize) {
this.interval = interval; this.interval = interval;
this.speedPoints = new TreeMap<>(); this.speedPoints = new TreeMap<>();
this.maxSpeed = 0;
this.minSpeed = Long.MAX_VALUE;
this.smoothingWindowSize = smoothingWindowSize; this.smoothingWindowSize = smoothingWindowSize;
} }
@ -54,12 +48,6 @@ public class AvgSpeed {
speed = smoothSpeed(speed); speed = smoothSpeed(speed);
} }
// Update max/min speeds only for non-zero speeds
if (speed > 0) {
maxSpeed = Math.max(maxSpeed, speed);
minSpeed = Math.min(minSpeed, speed);
}
// Add new speed point // Add new speed point
speedPoints.put(timestamp, new SpeedPoint(downloadedSize, speed)); speedPoints.put(timestamp, new SpeedPoint(downloadedSize, speed));
@ -162,14 +150,21 @@ public class AvgSpeed {
* Get maximum recorded speed * Get maximum recorded speed
*/ */
public long getMaxSpeed() { public long getMaxSpeed() {
return maxSpeed; return speedPoints.values().stream()
.map(point -> point.speed)
.max(Long::compare)
.orElse(0L);
} }
/** /**
* Get minimum recorded speed * Get minimum recorded speed
*/ */
public long getMinSpeed() { public long getMinSpeed() {
return minSpeed == Long.MAX_VALUE ? 0 : minSpeed; return speedPoints.values().stream()
.map(point -> point.speed)
.filter(speed -> speed > 0)
.min(Long::compare)
.orElse(0L);
} }
/** /**