java通过值拿到键_java 根据值获得键(map get key by value) - march

本文介绍了如何在Java中处理文档集合并创建词汇表,包括去除停用词和词干提取。当需要根据单词获取索引或反之时,讨论了JDK Map的局限性和使用Apache Commons Collections的BidiMap以及Guava的BiMap接口来实现根据值获取键的功能。给出了简单的代码示例。
摘要由CSDN通过智能技术生成

要处理一个文档集合,需要统计出corpus包含的所有单词,即统计出一个词汇表,词汇表中需要保存单词和相应的索引。当然,统计之前需要对文档进行stopword removal和text stemming。得到词汇表后,很自然地,我们有两种需求,一是根据单词得到它的索引,另外一

要处理一个文档集合,需要统计出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 mapping

BidiMap 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 biMap = HashBiMap.create();

biMap.put(1, "a");

biMap.put(2, "b");

biMap.put(3, "c");

BiMap invertedMap = biMap.inverse();

先写这么多吧,示例不完整,不过应该很简单的。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值