我有Map<Integer,Double>
存储密钥(raceNumber
)和值(speed
),以便:
race1 speed1
race2 speed2
race3 speed3
...
我目前正在使用for(raceNumber : map.keySet())
方法迭代地图,但我被卡住了,因为我需要计算speed2 - speed1
之间的差异。我该怎么做呢?
答案 0 :(得分:0)
如果种族ID是渐进式ID,您可以使用TreeMap来获取种族的顺序。
如果不是(但您知道订单),您可以使用LinkedHashMap并按顺序放置数据。
所以你可以创建一个Race对象:
public class Race {
private String raceId;
private BigDecimal speed;
public Race(String raceId, BigDecimal speed) {
this.raceId = raceId;
this.speed = speed;
}
public String getRaceId() {
return raceId;
}
public void setRaceId(String raceId) {
this.raceId = raceId;
}
public BigDecimal getSpeed() {
return speed;
}
public void setSpeed(BigDecimal speed) {
this.speed = speed;
}
}
以这种方式填充地图:
Map<String, Race> data = new TreeMap<String, Race>();
Race race = new Race("10001", new BigDecimal(275.70));
data.put(race.getRaceId(), race);
race = new Race("10002", new BigDecimal(267.38));
data.put(race.getRaceId(), race);
race = new Race("10003", new BigDecimal(272.00));
data.put(race.getRaceId(), race);
race = new Race("10004", new BigDecimal(259.90));
data.put(race.getRaceId(), race);
显然,您将从某个存储库获取数据并最终以这种方式计算速度:
List<Race> races = new ArrayList<Race>(data.values());
int j = 0;
for(int i = 0; i < races.size(); i++) {
Race currentRace = races.get(i);
j = i + 1;
if(j < races.size()) {
Race nextRace = races.get(j);
BigDecimal speedDiff = nextRace.getSpeed().subtract(currentRace.getSpeed());
speedDiff = speedDiff.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("Speed difference between RACE[ " + nextRace.getRaceId() + " ] and RACE[ " + currentRace.getRaceId() + " ] is: " + speedDiff);
}
}
结果将是:
Speed difference between RACE[ 10002 ] and RACE[ 10001 ] is: -8.32
Speed difference between RACE[ 10003 ] and RACE[ 10002 ] is: 4.62
Speed difference between RACE[ 10004 ] and RACE[ 10003 ] is: -12.10