java将hashmap键作为整数数组获取

时间:2011-09-14 07:17:40

标签: java integer hashmap

我有这样的哈希图

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

这里我的HashMap的关键是以字符串为单位的秒数,即我正在为这样的hashmap添加值

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

现在我想将hashmap中的所有键都放入整数数组列表中。

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

有没有办法做到这一点?

4 个答案:

答案 0 :(得分:11)

没有将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

答案 1 :(得分:1)

您不能将一种类型的List转换为另一种类型的List,因此您必须遍历这些键并解析每一种类型。

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

答案 2 :(得分: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());

答案 3 :(得分: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>());