如何在java中迭代映射以计算差异?

如何在java中迭代映射以计算差异?,java,maps,iteration,Java,Maps,Iteration,我有一个地图,它存储一个键(车号)和一个值(速度),这样: race1 speed1 race2 speed2 race3 speed3 ... 我目前正在使用for(raceNumber:map.keySet())方法迭代地图,但我被卡住了,因为我需要计算speed2-speed1之间的差异。我该怎么做呢?如果比赛ID是一个渐进式ID,你可以使用树形图来记录比赛顺序 如果不是(但你知道顺序),你可以使用LinkedHashMap并将数据按顺序排列 因此,您可以创建竞赛

我有一个
地图
,它存储一个键(
车号
)和一个值(
速度
),这样:

race1     speed1
race2     speed2
race3     speed3
...

我目前正在使用
for(raceNumber:map.keySet())
方法迭代地图,但我被卡住了,因为我需要计算
speed2-speed1之间的差异。我该怎么做呢?

如果比赛ID是一个渐进式ID,你可以使用树形图来记录比赛顺序

如果不是(但你知道顺序),你可以使用LinkedHashMap并将数据按顺序排列

因此,您可以创建竞赛对象:

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