Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java将hashmap键获取为整数数组_Java_Integer_Hashmap - Fatal编程技术网

java将hashmap键获取为整数数组

java将hashmap键获取为整数数组,java,integer,hashmap,Java,Integer,Hashmap,我有一个这样的hashmap public HashMap <String,People> valueHashMap = new Hashmap(); long timeSinceEpoch = System.currentTimeMillis()/1000; valueHashMap.put( Integer.toString((int)timeSinceEpoch) , people_obj

我有一个这样的hashmap

public HashMap <String,People> valueHashMap  = new Hashmap();
long timeSinceEpoch = System.currentTimeMillis()/1000;
valueHashMap.put(
                   Integer.toString((int)timeSinceEpoch)
                   , people_obj
                );
现在,我想将hashmap中的所有键放入一个整数数组列表中

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

有什么方法可以做到这一点吗?

没有直接的方法可以将
字符串的列表转换为
整数的列表:

  • 您需要像这样重新定义
    值hashmap

    public HashMap<Integer, People> valueHashMap  = new HashMap<Integer, People>();
    
    ....
    
    ArrayList<Integer> intKeys = new ArrayList<Integer>(valueHashMap.keySet());
    
    这样就不会对
    int
    进行强制转换(您可以将上面的(1)与
    Long
    一起使用)


  • 不能将一种类型的列表强制转换为另一种类型的列表,因此必须遍历键并解析每一个键

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

    你真的有类型问题。为什么要将长字符串更改为字符串以将其存储在地图中。为什么不简单地使用Long呢?Long需要更少的内存,更具描述性。那么为什么要使用Integer.toString将长字符串转换为字符串呢?通过将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());
    
    私有映射值Hashmap=newhashmap();
    long-timesincepoch=System.currentTimeMillis()/1000;
    valueHashMap.put(timesincepoch,people_obj);
    List longKeys=newarraylist(valueHashMap.keySet());
    
    您可以使用
    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>());
    
    List intKeys=(List)CollectionUtils.collect(valueHashMap.keySet(),new Transformer()){
    @凌驾
    公共对象变换(对象键){
    返回整数.valueOf(key);
    }
    },新的ArrayList());
    
    为什么在将int放入映射之前要将其转换为字符串?@Sanjay T.Sharma java hashmap可以接受整数键吗?如果将其定义为映射,则可以。它可以接受整数键(但不能接受整数键)。是的,整数完全可以用作映射中的键。只是你将在
    映射中放置一个
    整数
    而不是原语
    int
    ,但我认为这对你来说不应该是个问题。此外,自动装箱将帮助您减少从
    int
    Integer
    调用的转换。这是解析而不是强制转换@约阿希姆·绍尔:那是因为我的回答涵盖了一般情况(有时你可以在其中施放),我的代码就是针对这个问题的特定实例。无论如何都修复了它以避免混淆。问题是,许多人将任何类型的转换称为“强制转换”,这是错误的,并且会使人们更加困惑。+1使用
    Long
    将有助于避免混淆。选项2中有一些错误
    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());
    
    List<Integer> intKeys  = (List<Integer>)CollectionUtils.collect(valueHashMap.keySet(), new Transformer() {
                                        @Override
                                        public Object transform(Object key) {
                                            return Integer.valueOf(key);
                                        }
                                    }, new ArrayList<Integer>());