如何在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