我有这样的哈希图
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()...
有没有办法做到这一点?
答案 0 :(得分:11)
没有将String
列表转换为Integer
列表的直接方式:
您需要重新定义valueHashMap
这样的内容:
public HashMap<Integer, People> valueHashMap = new HashMap<Integer, People>();
....
ArrayList<Integer> intKeys = new ArrayList<Integer>(valueHashMap.keySet());
或者你需要循环:
ArrayList<Integer> intKeys = new ArraList<Integer>();
for (String stringKey : valueHashMap.keySet())
intKeys.add(Integer.parseInt(stringKey);
我建议您使用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>());