我是Java新手,我有一个for field in self.fields
。我想在给出值时从Map中搜索一个键。
地图将州的数据存储为关键,将城市的数据存储为列表。因此,假设没有重复的键或值。
以前的一些答案为许多人指出了解决方案:许多和一个:地图中的一个关键值关系,但我不了解如何检查列表中的值。
我是否遍历整个地图并为每个键获取列表并在列表中搜索?或者还有其他方法吗?
请提出一些方法。谢谢!
答案 0 :(得分:1)
你应该制作倒置地图(城市 - >州地图)。
public Map<String, String> invertedMap(Map<String, List<String>> map) {
Map<String, String> inverted = new HashMap<>();
for (Entry<String, List<String>> e : map.entrySet())
for (String city : e.getValue())
inverted.put(city, e.getKey() /* state */);
return inverted;
}
答案 1 :(得分:0)
映射旨在允许使用密钥快速访问值。反之亦然需要迭代所有值并寻找它。此外,您需要知道可以为多个密钥存储相同(或相等)的值。
为了有效地搜索给定城市名称的所有州,您可以使用逆映射,其中城市名称是关键,值是状态的集合(假设有几个城市各自处于不同的状态 - 例如,美国似乎有多个Springfield
。
创建这样的倒置地图的简单方法是使用Guava的Multimap作为初始地图(州 - >城市),然后使用Multimaps.invertFrom(intialMap);
。
编辑:关于Brett Walker的评论,Apache Commons Collections&#39; BidiMap
似乎遵循类似的方法,即AbstractDualBidiMap
实现内部使用两个地图,如上所述。
答案 2 :(得分:0)
我会使用Apache Common Collection
库中的div
作为起点。
对于$someEle.append("<div><span>5</span><span>€</span></div>");
var $newELE = $someEle.find('div');
部分,我会考虑使用BidiMap
,因为它会修饰另一个地图,允许它为一个键设置多个值。
我已使用List<String>
位而不是MultiValueMap
。我认为两者都有用。