簡體   English   中英

根據List的順序重新排序Map

[英]Re-order Map based on ordering of List

假設我有兩個數據結構,一個有序的字符串列表和一個HashMap。 列表看起來像:

types = ["string", "integer", "boolean", "integer"];

帶有對象鍵和String值的HashMap如下所示:

map = {2=integer, true=boolean, 7=integer, "dog"=string};

什么是最簡單/最有效的方式來重新組織Map的“順序”,以便Map的值與列表的順序一致,即,Map在打印時現在看起來像這樣:

map = {"dog"=string, 2=integer, true=boolean, 7=integer};

HashMap不提供訂單保證。 文檔

這個類不保證地圖的順序; 特別是,它不保證訂單會隨着時間的推移保持不變。

因此,如果您想要一個有序的Map ,通常需要從SortedMap文檔 )的實現開始。

不幸的是, SortedMap按鍵進行排序,並且您希望按值排序,因此您要么必須查看第三方集合庫,要么考慮類似LinkedHashMap文檔 )的內容,它具有可預測的迭代順序,即使它不保持排序。

當您的示例顯示兩個整數時,您將使用什么策略來決定使用哪個整數?

像這樣構建一個反向hashmap,

types = ["string", "integer", "boolean", "integer"];

map = {2=integer, true=boolean, 7=integer, "dog"=string};

reversedmap = {integer=[2,7], boolean=true, string=dog};

然后遍歷列表並從反轉映射中獲取相應的鍵。

例如,首先你從類型 - >獲得“字符串”,所以你知道相應的鍵應該是“狗”。 在其他某個映射( LinkedHashMap類型)中插入此鍵值對。 繼續這樣做,直到你到達類型列表的末尾。

編輯:謝謝@FedericoPeraltaSchaffner指出這一點。

如果從相反的映射中獲取兩個值(例如,在“整數”元素的情況下),您可以選擇其中一個(無關緊要)插入到LinkedHashMap中,同時隨后將其從反轉映射中刪除。 然后你開始使用類型列表中的下一個元素

暫無
暫無

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

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