簡體   English   中英

從嵌套的hashmap中檢索值

[英]retrieving the values from the nested hashmap

我有一個包含許多表節點結構副本的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’

但我現在面臨的問題是使用嵌套的密鑰檢索Value部分。 例如,

如果我需要Slno Key的值,我必須以嵌套的形式指定TblID,SelectColumns,Slno,如:

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

這在程序中使用是不合理的。 請提出解決方案,但不要告訴迭代器可用。 因為我要根據程序的需要從地圖中獲取單個值。

編輯:我的程序必須獲取有權發送郵件的部門的ID,然后將這些ID與XML文件中的ID進行比較。 只從XML中獲取這些ID的信息,這些信息在比較時返回true。 這是我的全部計划。 請幫忙。

提前謝謝,Vishu

  1. 永遠不要轉換為特定的Map實現。 更好地使用轉換到Map接口,即((Map)one.get("foo")).get("bar")

  2. 不要在你的情況下使用鑄件。 您可以使用泛型定義集合,因此編譯器將為您工作:

    Map <String,Map> one = new HashMap <String,Map>();

    Map <String,Integer> two = new HashMap <String,Integer>();

現在你可以說:

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

沒有鑄造,沒有問題。

但更好的解決方案是根本不使用嵌套表。 創建自定義類,如SelectColumnsWhereCondition等。每個類應該有適當的私有字段,getter和setter。 現在解析這些類的XML創建實例。 然后使用getter遍歷數據結構。

順便說一句,如果您想使用JAXB,您幾乎不需要做任何事情! 類似於以下內容:

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

一種方法是生成包含元素或屬性的XML路徑的完全限定鍵。 這些鍵是唯一的,存儲在單個hashmap中,可以快速訪問元素。

您的代碼只需生成路徑的唯一文本表示,並根據鍵存儲和檢索xml元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM