【问题标题】:How to access the data in a Java hashmap with a nested object如何使用嵌套对象访问 Java 哈希图中的数据
【发布时间】:2018-07-12 12:05:57
【问题描述】:

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

初始代码(工作)

String todo = task.getText().toString().trim();
String description = desc.getText().toString().trim();

Map<String, String> dataToSave = new HashMap<>();
        dataToSave.put("todo", todo);
        dataToSave.put("description", description);

当前代码(无效)

ListItems 是一个 Java 类,我在其中定义了待办事项和描述。我想将用户 ID 映射到键,并将待办事项 + 描述作为值。

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);

所以,我放置空白的部分实际上是我需要帮助的部分。我如何映射待办事项和描述?

提前致谢。

【问题讨论】:

  • Iterate through a HashMap的可能重复
  • 我不认为它是重复的,因为哈希图中的元素之一是对象,而不是值/整数。这就是我遇到问题的部分。
  • 有什么理由不使用dataToSave.put(&lt;userid&gt;, BLANK);?我希望 BLANK 类似于ListItem BLANK = new ListItem("","");
  • map.get("KEY") 将返回 Object 。跟迭代有关吧?

标签: java android firebase firebase-realtime-database


【解决方案1】:

在我告诉你如何做你所要求的之前,你有没有尝试编译程序?就目前而言,您的程序将无法编译。您的 hashmap 需要一个其对象为 ListItem 类型的值。你在 put() 调用中传递的是 String 对象。

你的 ListItem 类看起来像这样吗?

class ListItem {
    String todo;
    String description;
}

如果是,那么您需要添加一个构造函数来实例化 ListItem 对象。这就是它的样子。

class ListItem {
    String todo;
    String description;

    ListItem(String to, String desc) {
        todo = to;
        description = desc;
    }
}

一旦你得到待办事项和描述(问题中代码的前两行),你需要创建一个 ListItem 对象,将 tododescription 作为参数传递给构造函数。

ListItem listItem = new ListItem(todo, description);

完成此操作后,您可以将 ListItem 对象添加到 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);

在这一点上,您似乎对对象没有太多掌握。我建议重新阅读教科书中的基础知识或阅读大量在线资源。

【讨论】:

  • 是的,这实际上是我的第一个项目,所以我正在努力学习。我有 2 个问题。首先,在最后一段代码中,为什么我必须得到我需要的值作为 ListItem?为什么我必须再次实例化另一个对象 ListItem?
  • 1.为什么我必须获得作为 ListItem 所需的值? - 因为你的值是一个 ListItem 对象。没有其他方法可以阅读它。 2. 为什么我必须再次实例化另一个对象ListItem? - 您没有再次创建/实例化新对象。它只是对同一对象的引用。如果这是你的第一个项目,我建议尝试一些比涉及 HashMap 的东西更简单的东西。在你正确理解理论概念之前,我什至会忘记编码。
  • 我明白了,这很有帮助。那么我是否正确地说,通过指向我需要作为 ListItem 的值,我只能从“值”(即 ListItem 对象中的元素)而不是字符串中获取我需要的值(即钥匙)?
  • 对不起,直言不讳,但你的问题没有任何意义。将 HashMap 视为已经创建的锁定宝藏的集合。现在,HashMap 将让你只打开那些你有钥匙的宝藏。所以,在你进去之前,你应该有钥匙。如果我已经回答了您的问题,请将答案标记为已接受。
猜你喜欢
  • 1970-01-01
  • 2013-04-21
  • 2020-07-07
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多