java 根據值獲得鍵(map get key by value)

來源:互聯網
上載者:User

要處理一個文檔集合,需要統計出corpus包含的所有單詞,即統計出一個詞彙表,詞彙表中需要儲存單詞和相應的索引。當然,統計之前需要對文檔進行stopword removal和text stemming。得到詞彙表後,很自然地,我們有兩種需求,一是根據單詞得到它的索引,另外一個就是根據索引得到相應的單詞。但是jdk中的map類只支援根據key來擷取value,如果要根據value擷取key就需要使用entryset方法得到所有的entry,再遍曆一遍,判斷每個entry的value是否就是我們期望的,如果是,就記下這個entry相應的key,具體參考這裡。

當然,那是比較ugly的做法。我們可以使用Apache Commons Collections中的BidiMap介面來完成這個任務,使用這個介面的限制之一就是key和value必須是一一對應(one to one)的。下面是一個簡單的樣本:

BidiMap bidi = new HashBidiMap();bidi.put("SIX", "6");bidi.get("SIX");  // returns "6"bidi.getKey("6");  // returns "SIX"bidi.removeValue("6");  // removes the mappingBidiMap inverse = bidi.inverseBidiMap();  // returns a map with keys and values swapped

在google上還可以搜到幾個例子:http://java.dzone.com/articles/guavas-bidirectional-maps,

Apache Commons Collections中的介面不支援泛型(generics),不過還有另外一個選擇guava-libraries,這是來自google的類庫。裡面的BiMap可以完成同樣的任務,簡單的樣本如下:

BiMap<Integer, String> biMap = HashBiMap.create();biMap.put(1, "a");biMap.put(2, "b");biMap.put(3, "c");BiMap<String, Integer> invertedMap = biMap.inverse();

先寫這麼多吧,樣本不完整,不過應該很簡單的。

參考:http://stackoverflow.com/questions/1383797/java-hashmap-how-to-get-key-from-value

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.