从HashMap中提取值<string,object =“”>

时间:2015-12-05 01:49:27

标签: java string hashmap int

我有一组参数,以字符串形式存储在文件中:

param = value

我的程序读取这些值并将它们放入HashMap,其中“key”是文件中的param,值是对象。然后可以在程序中引用此HashMap,并且最终将更改的值重新写入文件。访问速度很快(与磁盘访问相反,因为它在一些非常旧的(和慢速)硬件上运行。

选择HashMap是因为某些值是字符串,其他值是整数,双打和最终列表。当值放入Map时,将执行从字符串到int,double等的转换。这允许进行前期检查,因为参数文件通常最初是手工创建的,并且可能会不时地手动修改。

从HashMap中提取数据时,我的代码开始变得非常混乱,因为现在我必须要么全部转换,要么转换它。即使是简单的String(包含文件中约90%的值)看起来也很糟糕。例如,如果我有对字符串执行某些处理的方法:

public void pString(String x) {
       // do something with 'x'
}

我有以下定义:

HashMap<String, Object> parmsMap = new HashMap<String, Object>();
parmsMap.put("wait", 300); // integer value
parmsMap.put("title", "File Access"); // string value

我必须通过以下方式之一调用pString:

pString((String)parmsMap.get("title"));
pString(parmsMap.get("title").toString());

这些都不是很清楚!

现在我知道我可以将parmsMap改为:

HashMap<String, String> parmsMap = new HashMap<String, String>();

我90%的电话都是:

pString(parmsMap.get("title"));

这不那么混乱。

但是,这意味着每次我想访问它们时都必须检查/转换所有“非字符串”条目!

有更好的方法吗?如果不是,哪种方法会降低性能?

pString((String)parmsMap.get("title"));

pString(parmsMap.get("title").toString());

并且比其他人更“安全”吗?

2 个答案:

答案 0 :(得分:1)

请勿直接使用React attempted to reuse markup in a container but the checksum was invalid。用一个实现类似方法的类包装它:

HashMap

基本上,提供类似于public String getString(String name); public int getInt (String name); public double getDouble(String name); 的方式的类型化方法。

答案 1 :(得分:0)

我认为这里最好的方法是使用instanceof运算符检查类类型并根据它执行相应的操作(使用您的方法可能抛出ClassCastException或空指针异常,也不是所有的class将实现toString()方法。如果你将用户定义的类的实例作为一个值并且没有覆盖toString(),那么它将显示没有任何意义的字符串(例如Class @ 4324fas))。然后,如果你有太多的instanceof检查,那么你的代码看起来会很混乱(如果条件的话,那就太多了。)这是一个如何通过枚举实现的例子。

public A() {

    CLAZZ z = CLAZZ.valueOf(this.getClass().getSimpleName());
    switch (z) {
    case A:
        doA();
        break;
    case B:
        doB();
        break;
    case C:
        doC();
        break;
    }
}


enum CLAZZ {
    A,B,C;

}

对于上面的例子,我接受了this的引用,所以回答。