2011-09-14 19 views
2

私はここに、このJavaの整数配列としてハッシュマップのキーを取得します

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

私のHashMapのキーのようなハッシュマップは、私は値を追加していすなわち、この

long timeSinceEpoch = System.currentTimeMillis()/1000; 
valueHashMap.put(
        Integer.toString((int)timeSinceEpoch) 
        , people_obj 
       ); 
ようHashMapのために文字列として秒単位の時間である必要があり

今、ハッシュマップのすべてのキーを整数の配列リストに入れたいと思います。

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

これを行う方法はありますか?

+2

なぜintを文字列に変換してマップに入れるのですか? –

+0

@Sanjay T. Sharmaはjavaハッシュマップの整数キーを取ることができますか? – Krishnabhadra

+1

これをMap として定義すると、はいです。 –

答えて

10

Integer秒のリストにStringのリストを変換する直接的な方法はありません。

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

.... 

ArrayList<Integer> intKeys = new ArrayList<Integer>(valueHashMap.keySet()); 
  • それとも:

    1. あなたはこのようなあなたのvalueHashMapを再定義する必要がありますどちらかループする必要があります:

      ArrayList<Integer> intKeys = new ArraList<Integer>(); 
      
      for (String stringKey : valueHashMap.keySet()) 
          intKeys.add(Integer.parseInt(stringKey); 
      
    2. public HashMap<Long, People> valueHashMap = new HashMap<Long, People>(); 
      

      が、その後intへのキャストはないだろう(そして、あなたはLong代わりに、上記(1)使用することができます)私の代わりにキーとしてLongを使用するために、しかし、あなたをアドバイスします。

  • +2

    +1 ' 2038年問題](http://ja.wikipedia.org/wiki/Year_2038_problem)を参照してください。 –

    +0

    オプション2にいくつかの間違いがあります。 – Nfear

    1

    1つのタイプのリストを別のタイプのリストにキャストすることはできません。したがって、キーを繰り返し処理してそれぞれを解析する必要があります。

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

    これは*キャスティング*ではなく、*解析しています! –

    +0

    @Joachim Sauer:私の答えは一般的なケース(あなたが時々キャストすることができる)をカバーし、私のコードは問題のこの特定のインスタンスのためでした。とにかく混乱を避けるために修正されました。 – pablochan

    +0

    問題は、多くの人々が*あらゆる種類の型変換を「キャスティング」と呼び、それが間違っており、人々をさらに混乱させることです。 –

    0

    実際にタイプの問題があります。ロングを文字列に変換してマップに格納するのはなぜですか?単にLongを使用しないでください.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>()); 
    
    関連する問題