如何使用嵌套对象访问Java hashmap中的数据

如何使用嵌套对象访问Java hashmap中的数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,所以我知道HashMap通常有键和值。我环顾四周,有人建议如果我想显示3个值,我应该使用嵌套的hashmaps。但是现在,我无法从hashmap中获取数据。请告诉我如何改进下面的代码 初始代码(工作) String todo=task.getText().toString().trim(); 字符串描述=desc.getText().toString().trim(); Map dataToSave=new HashMap(); dataToSave.put(“todo”,todo); data

所以我知道HashMap通常有键和值。我环顾四周,有人建议如果我想显示3个值,我应该使用嵌套的hashmaps。但是现在,我无法从hashmap中获取数据。请告诉我如何改进下面的代码

初始代码(工作)

String todo=task.getText().toString().trim();
字符串描述=desc.getText().toString().trim();
Map dataToSave=new HashMap();
dataToSave.put(“todo”,todo);
dataToSave.put(“说明”,说明);
当前代码(不工作)

ListItems是一个Java类,我在其中定义了to-do和description。我想将userid映射到键,并将to-do+描述作为一个值

String todo = task.getText().toString().trim();
String description = desc.getText().toString().trim();
String userid = mAuth.getCurrentUser().getUid();

Map<String, ListItem> dataToSave = new HashMap<>();
dataToSave.put("user", userid);
dataToSave.put("todo", BLANK);
dataToSave.put("description", BLANK);
String todo=task.getText().toString().trim();
字符串描述=desc.getText().toString().trim();
字符串userid=mAuth.getCurrentUser().getUid();
Map dataToSave=new HashMap();
dataToSave.put(“用户”,userid);
dataToSave.put(“todo”,空白);
dataToSave.put(“说明”,空白);
所以,我空白的部分实际上是我需要帮助的部分。如何映射待办事项和描述


提前谢谢。

在我告诉您如何执行您的要求之前,您是否尝试过编译该程序?目前,您的程序无法编译。hashmap需要一个对象类型为ListItem的值。在put()调用中传递它的是字符串对象

ListItem类是这样的吗

class ListItem {
    String todo;
    String description;
}
如果是,则需要添加构造函数来实例化ListItem对象。这就是它的样子

class ListItem {
    String todo;
    String description;

    ListItem(String to, String desc) {
        todo = to;
        description = desc;
    }
}
获得todo和description(问题代码的前两行)后,需要创建一个ListItem对象,将todo和description作为参数传递给构造函数

ListItem listItem = new ListItem(todo, description);
完成此操作后,可以将ListItem对象添加到hashmap

Map<String, ListItem> dataToSave = new HashMap<>();
dataToSave.put(userId, listItem);

在这一点上,看起来您对对象没有太多的把握。我建议重温教科书中的基础知识,或者阅读大量在线资源

可能的重复我不认为它是重复的,因为hashmap中的一个元素是对象,而不是值/整数。这是我遇到问题的部分。你为什么不使用
dataToSave.put(,BLANK)呢?我希望BLANK类似于
listItemblank=newlistItem(“,”)
map.get(“KEY”)
将返回对象。它与迭代有关,不是吗?是的,这实际上是我的第一个项目,所以我一直在努力学习。我有两个问题。首先,在最后一段代码中,为什么我必须获得作为ListItem所需的值?为什么我必须再次实例化另一个对象ListItem?1。为什么我必须获得作为列表项所需的值因为您的值是ListItem对象。没有其他的阅读方法。2.为什么我必须再次实例化另一个对象ListItem?-您不会再次创建/实例化新对象。它只是对同一对象的引用。如果这是您的第一个项目,我建议您尝试一些比HashMap更简单的方法。我甚至会暂时忘记编码,直到你的理论概念正确。我明白了,这很有帮助。那么,我是否可以正确地说,通过指向作为ListItem所需的值,我将只能从“值”(即ListItem对象中的元素)而不是字符串(即键)中获取所需的值?很抱歉,直截了当,但您的问题没有任何意义。将HashMap视为已创建的锁定宝藏的集合。现在,HashMap将允许您只打开那些您拥有密钥的宝藏。所以,你应该先拿到钥匙,然后才能进去。如果我已经回答了你的问题,请将答案标记为已接受。
Map<String, ListItem> dataToSave = new HashMap<>();
dataToSave.put(userId, listItem);
ListItem item = dataToSave.get(userId);   //whatever userid key you want to retrieve data from

System.out.println("UserId: " + userId + ", Todo: " + item.todo + ", Desc: " + item.desc);