2017-02-06 98 views
0

我有以下的HashMap(稱爲「trafficInput」)和城市。每個城市都包含一個以毫秒爲單位的每日時間戳列表,每個時間戳點還有兩個數據點。一個城市(「巴黎」)爲空:如何將一個ArrayList添加到Java中的Hashmap中

{"paris":[],"london":[[1485907200000,182184411,41274],[1485993600000,151646118,36697],[1486080000000,48486138,18998],[1486166400000,5405780,5246],[1486252800000,1194440,1370]],"zurich":[[1485907200000,30200160,155827],[1485993600000,26681354,160269]]} 

我想通過此HashMap迭代,自2017年2月1日,添加任何日常時間戳(0爲其他兩個數據點),直到今天,如果他們尚未列入清單。所以,最佳的輸出將是:

{"paris":[[1485907200000,0,0],[1485993600000,0,0],[1486080000000,0,0],[1486166400000,0,0],[1486252800000,0,0]],"london":[[1485907200000,182184411,41274],[1485993600000,151646118,36697],[1486080000000,48486138,18998],[1486166400000,5405780,5246],[1486252800000,1194440,1370]],"zurich":[[1485907200000,30200160,155827],[1485993600000,26681354,160269],[1486080000000,0,0],[1486166400000,0,0],[1486252800000,0,0]]} 

我已經編寫了以下內容:

long startTime = 1485907200; // 01 Feb 2017 00:00:00 GMT 
long currentTime = (System.currentTimeMillis()/1000L); 
while (startTime < currentTime) { 
    for (String city : trafficInput.keySet()) { 
     for (long[] cityAllValues : trafficInput.get(city)) { 
      long[] newCityValues = {startTime*1000, 0, 0}; 
      ArrayList newCityValuesList = new ArrayList<>(); 
      newCityValuesList.add(newCityValues); 
      trafficInput.put(city, newCityValuesList); 
     } 
    } 
startTime = startTime+86400; 
} 

不幸的是,代碼簡單的覆蓋所有現有值,而不附加它們。我在這裏錯過了什麼?

+0

'newCityValuesList.addAll(trafficInput.get(city));'put'之前? –

+0

這個一般看起來不像OOP那樣。看來你應該創建代表你的模型的類(城市有一系列包含你的數據的對象) –

回答

1

put方法不會追加,它會覆蓋。你需要給自己附加價值,所以不是做

ArrayList newCityValuesList = new ArrayList<>(); // create new empty arraylist 
newCityValuesList.add(newCityValues); 
trafficInput.put(city, newCityValuesList); 

你應該抓住現有的值列表,並加入到他們:

ArrayList newCityValuesList = trafficInput.get(city); //get existing values 
newCityValuesList.add(newCityValues); 
trafficInput.put(city, newCityValuesList); 

這樣,它仍然會覆蓋,但因爲你抓住了現有數據的結果將是原始數據+附加值

+0

謝謝,但不會創建重複?每個時間戳只應在每個城市出現一次。 – TheBigDoubleA

相關問題