2011-09-14 22 views
2

我有這樣的java獲取HashMap的鍵作爲整數數組

public HashMap <String,People> valueHashMap = new Hashmap(); 

這裏的關鍵是我的HashMap的HashMap中是以秒爲字符串的時候,也就是我增值的HashMap這樣

long timeSinceEpoch = System.currentTimeMillis()/1000; 
valueHashMap.put(
        Integer.toString((int)timeSinceEpoch) 
        , people_obj 
       ); 

現在我想要將hashmap中的所有密鑰放入整數的數組列表中。

ArrayList<Integer> intKeys = valueHashMap.keys()... 

有沒有辦法做到這一點?

+2

爲什麼在將int轉換爲String之前將它放入Map中? –

+0

@Sanjay T. Sharma可以用java hashmap取整數鍵嗎? – Krishnabhadra

+1

如果將其定義爲Map ,則爲Yes。 –

回答

10

有一種String個列表轉換成的Integer秒的名單沒有直接的方法:

  1. 要麼你需要重新定義您valueHashMap這樣的:

    public HashMap<Integer, People> valueHashMap = new HashMap<Integer, People>(); 
    
    .... 
    
    ArrayList<Integer> intKeys = new ArrayList<Integer>(valueHashMap.keySet()); 
    
  2. 或者你需要循環:

    ArrayList<Integer> intKeys = new ArraList<Integer>(); 
    
    for (String stringKey : valueHashMap.keySet()) 
        intKeys.add(Integer.parseInt(stringKey); 
    
  3. 我會建議你不過使用Long爲重點,而不是

    public HashMap<Long, People> valueHashMap = new HashMap<Long, People>(); 
    

    那麼就不會有鑄造int(你可以在上面使用(1)Long代替)

+2

+1使用'長'將有助於避免[ 2038年問題](http://en.wikipedia.org/wiki/Year_2038_problem)。 –

+0

選項2中存在一些錯誤 – Nfear

1

您不能將一種類型的列表強制轉換爲另一種類型的列表,因此您必須迭代鍵並解析每個鍵。

for(String k : valueHashMap.keySet()) { 
    intKeys.add(Integer.valueOf(k)); 
} 
+0

這是*解析*而不是*鑄造*! –

+0

@Joachim Sauer:那是因爲我的回答涵蓋了一般情況(你有時可以投),而我的代碼是針對這個問題的具體實例。無論如何都要修正它以避免混淆。 – pablochan

+0

問題是許多人稱任何類型的轉換「鑄造」,這是錯誤的,甚至進一步混淆了人們。 –

0

確實有類型問題。你爲什麼要將長整型變成字符串以將其存儲在地圖中。爲什麼不簡單地使用Long,這需要更少的內存並且更具描述性。那麼爲什麼使用Integer.toString將long轉換爲String呢?通過將你的long值轉換爲int值,你可能會失去信息。以下代碼應該如何顯示:

private Map<Long, People> valueHashMap = new Hashmap<Long, People>(); 

long timeSinceEpoch = System.currentTimeMillis()/1000; 
valueHashMap.put(timeSinceEpoch, people_obj); 
List<Long> longKeys = new ArrayList<Long>(valueHashMap.keySet()); 
0

您可以使用org.apache.commons.collections.Transformer類,如下所示。

List<Integer> intKeys = (List<Integer>)CollectionUtils.collect(valueHashMap.keySet(), new Transformer() { 
            @Override 
            public Object transform(Object key) { 
             return Integer.valueOf(key); 
            } 
           }, new ArrayList<Integer>());