Java Android-从2d HashMap获取值

Java Android-从2d HashMap获取值,java,android,hashmap,Java,Android,Hashmap,我试图从HashMap列表中获取一些值。该列表是多维的,看起来像: {user_90= { levels_win={level_2=true, level_1=true}, levels_stars={level_2=3, level_1=2} }} 我使用以下方法从firebase数据库获取列表: HashMap value = (HashMap) dataSnapshot.getValue(); 如何转换HashMap,以便使用以下方法获取值: int star_level_2 = v

我试图从
HashMap
列表中获取一些值。该列表是多维的,看起来像:

{user_90= {
levels_win={level_2=true, level_1=true}, 
levels_stars={level_2=3, level_1=2}
}}
我使用以下方法从firebase数据库获取列表:

HashMap value = (HashMap) dataSnapshot.getValue();
如何转换
HashMap
,以便使用以下方法获取值:

int star_level_2 = value["user_90"]["levels_stars"]["level_2"];
不幸的是,Java是一种静态强类型语言,所以它不会以这种方式工作。而且(我认为这对几乎所有人来说都是不幸的)您不能直接在标准集合中存储基本类型,例如
int
。最后,Java不支持运算符重写,因此您不能使用“[”“]”键访问
映射中的值

因此,您可以做的是显式地指定您的类型,例如

HashMap<String, HashMap<String, HashMap<String, Object>>> container = (HashMap<>) dataSnapshot.getValue();
int star_level_2 = (Integer)(value.get("user_90").get("levels_stars").get("level_2"));
HashMap容器=(HashMap)dataSnapshot.getValue();
int star_level_2=(Integer)(value.get(“user_90”).get(“levels_stars”).get(“level_2”);

如果您的数据结构具有不同深度的内部对象,那么您使用这种方法是不走运的,您必须在每个级别上的每个
get
之后将结果转换为特定的数据类型。

谢谢您的回答,这就是我在尝试了很多小时后所认为的完好无损。我最终为每个值转换了数据manually@SNos,因此,其他一些答案建议您可以使用Jackson ObjectMapper简化编写代码。看,我自己还没有尝试过,但可能您可以使用相同的方法从Firebase映射回对象。请注意,您必须更改数据结构,使键具有固定名称,而不是索引,例如
user_90