gpt4 book ai didi

java - 从嵌套 HashMap 中检索值

转载 作者:行者123 更新时间:2023-12-02 08:18:20 27 4
gpt4 key购买 nike

我有一个 XML 文件,其中包含许多表节点结构副本,如下所示:

<databasetable TblID=”123” TblName=”Department1_mailbox”>
<SelectColumns>
<Slno>dept1_slno</Slno>
<To>dept1_to</To>
<From>dept1_from</From>
<Subject>dept1_sub</Subject>
<Body>dept1_body</Body>
<BCC>dept1_BCC</BCC>
<CC>dept1_CC</CC>
</SelectColumns>
<WhereCondition>MailSentStatus=’New’</WhereCondition>
<UpdateSuccess>
<MailSentStatus>’Yes’</MailSentStatus>
<MailSentFailedReason>’Mail Sent Successfully’</MailSentFailedReason>
</UpdateSuccess>
<UpdateFailure>
<MailSentStatus>’No’</MailSentStatus>
<MailSentFailedReason>’Mail Sending Failed ’</MailSentFailedReason>
</ UpdateFailure>
</databasetable>

由于每次遍历文件来获取程序中查询的每个节点的详细信息并不是一种有效的方式,因此我在第一次遍历 XML 文件时使用了嵌套 hashmap 概念来存储详细信息。我使用的结构如下:

MapMaster
Key Value
123 MapDetails
Key Value
TblName Department1_mailbox
SelectColumns mapSelect
Key Value
Slno dept1_slno
To dept1_to
From dept1_from
Subject dept1_sub
Body dept1_body
BCC dept1_BCC
CC dept1_CC
WhereCondition MailSentStatus=’New’
UpdateSuccess mapUS
MailSentStatus ’Yes’
MailSentFailedReason ’Mail Sent Successfully’
UpdateFailure mapUF
MailSentStatus ’No’
MailSentFailedReason ’Mail Sending Failed’

但是我现在面临的问题是使用嵌套的键检索值部分。例如,

如果我需要 Slno Key 的值,我必须以嵌套形式指定 TblID、SelectColumns、Slno,如下所示:

Stirng Slno = ((HashMap)((HashMap)mapMaster.get(“123”))mapDetails.get(“SelectColumns”))mapSelect.get(“Slno”);

这在程序中使用起来很不方便。请提出一个解决方案,但不要说明迭代器可用。因为我必须根据程序的需要从 map 中获取单独的值。

编辑:我的程序必须获取有权限发送邮件的部门的 ID,然后将这些 ID 与 XML 文件中的 ID 进行比较。仅从 XML 中获取这些 ID 的信息,相比之下返回 true。这就是我的全部计划。请帮忙。

提前致谢,毗湿奴

最佳答案

  1. 切勿转换为特定的 Map 实现。最好使用映射到 Map 接口(interface),即((Map)one.get("foo")).get("bar")

  2. 请勿在您的情况下使用强制转换。您可以使用泛型定义集合,因此编译器将为您工作:

    Map one = new HashMap ();

    Map 二 = new HashMap ();

现在你可以说:

int n = one.get("foo").get("bar");

无需转换,没有问题。

但更好的解决方案是根本不使用嵌套表。创建自定义类,例如 SelectColumnsWhereCondition 等。每个类都应该有适当的私有(private)字段、getter 和 setter。现在解析您的 XML 创建这些类的实例。然后使用getter来遍历数据结构。

顺便说一句,如果您想使用 JAXB,您几乎不需要做任何事情!类似于以下内容:

Unmarshaller u = JAXBContext.newInstance(SelectColumns.class, WhereCondition.class).createUnmarshaller();
SelectColumns[] columns = (SelectColumns[])u.unmarshal(in);

关于java - 从嵌套 HashMap 中检索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5928850/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com