Java: java.lang.Double不能转换为java.lang.String

5

我正在将一个double值存储在HashMap中,如下所示

HashMap listMap = new HashMap();

double mvalue =0.0;

listMap.put("mvalue",mvalue );

现在当我尝试检索该值时,如下所示:
mvalue = Double.parseDouble((String) listMap.get("mvalue"));

我遇到了一个错误:

java.lang.Double无法转换为java.lang.String

我在这里感到困惑,

这是我的实际HashMap,我正在按照下面的方式设置值

HashMap listMap = new HashMap();
double mvalue =0.0 ;
List<Bag> bagList = null; 
listMap.put("bagItems",bagList);
listMap.put("mvalue", mvalue);

有人可以告诉我,HashMap的结构应该是怎样的吗?


除了回答您的问题外,您可能还想阅读关于泛型的教程。http://docs.oracle.com/javase/tutorial/java/generics/index.html - Dunes
8个回答

8

您在Map中放置了一个Double。不要先转换为字符串。以下代码可以正常工作:

HashMap<String, Double> listMap = new HashMap<String, Double>();
mvalue = listMap.get("mvalue");

你的原始double正在被自动装箱为Double对象。为避免需要进行强制类型转换,请使用泛型,即 <String, Double> 部分。


3
我猜你的地图会存储许多不同类型的内容,所以我建议使用 泛型。
HashMap listMap = new HashMap<String, Object>();
double mvalue =0.0;
listMap.put("mvalue",mvalue );
.
.
.
String mValueString = Double.toString((Double) listMap.get("mvalue"));

这将获取双倍对象,将其转换为Double类型,并在新变量中将其转换为字符串。

1
谢谢。HashMap listMap = new HashMap<String, Object>(); 真的解决了问题。 - Adizbek Ergashev

1

首先,创建一个定义了类类型的HashMap,例如:HashMap<String,Double>

其次,这应该可以工作:

mvalue = Double.parseDouble(Double.toString(listMap.get("mvalue")));

虽然,最好的方法是:

mvalue = listMap.get("mvalue");
// provided defined HashMap is HashMap<String,Double>

如果映射存储双精度值,为什么要解析它?在这里,您进行了两次不必要的解析。首先是将双精度转换为字符串,然后再将字符串转换为双精度。 - Harry Joy
当值已经是Double类型时,为什么要在String和Double之间来回转换呢?虽然这样做可行,但是否有必要呢? - claesv
是的,我知道。我修改了我的答案以适应它的需求,但我想告诉@yyy i 777,在这种情况下该怎么做! - Ramandeep Singh
地图已经保存了一个Double。如果mvalue需要是原始类型,那么拆箱就可以了。你为什么要调用toString,然后将其解析为Double呢? - planetjones

1
如果您引入泛型,您将立即发现问题。
Map<String, Double> listMap = new HashMap<String, Double>();
Double mvalue = listMap.get("mvalue");

原因是你的地图确实返回了一个Double而不是String,因此出现了错误信息。

1

怎么样?

mvalue = listMap.get("mvalue");

?


0

试试这个:

HashMap<String, Double> listMap = new HashMap<String, Double>();
Double mvalue = 0.0;
listMap.put("mvalue", mvalue);
mvalue = listMap.get("mvalue");

0

你的代码应该长这样:

Map<String,Double> listMap = new HashMap<String,Double>();
double mvalue = 0.0;
listMap.put("mvalue", mvalue );
mvalue = Double.parseDouble( String.valueOf(listMap.get("mvalue")) );

请注意,如果您需要检索包装器而不是原始类型,则可以使用包装器类XXX.valueOf()而不是返回原始类型的XXX.parseXXX()。

0
mvalue = Double.parseDouble(String.valueOf(listMap.get("mvalue")));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接