【发布时间】:2016-04-23 16:35:24
【问题描述】:
我有以下代码,用于通过将其转换为字符串并使用 contains() 方法在 Map 映射中搜索“值”的一部分。问题是,如果我搜索任何整数值(例如“4”),conatins() 方法会返回 true,因为它会找到与“key”匹配的。
public ArrayList<Map<Integer, String>> search(final ArrayList<Map<Integer, String>> myMapList, String searchTerm)
{
ArrayList<Map<Integer, String>> newListOfMaps = new ArrayList<Map<Integer, String>>();
for (Map<Integer, String> map : myMapList)
{
if (map.toString().contains(searchTerm))
{
newListOfMaps.add(map);
}
}
return newListOfMaps;
}
示例数据:
myMapList.get(0)= {1=laptop, 2=4, 3=stackover, 4=flow}myMapList.get(1)= {1=laptop, 2=pc, 3=stackover, 4=flow}
案例 1:如果我的“searchTerm”是“top”,我希望返回两个地图。
案例 2:如果我的“searchTerm”是“4”,我只想要返回的第一张地图。
但我要让他们两个都回来了。
有没有更好的在地图中搜索的方法?
【问题讨论】:
-
如果将 Map 转换为字符串(通过对其调用 toString()),返回的字符串将包含键和值。在搜索目标字符串之前调用 map.values() 只获取值。
-
如果您正在搜索值,我发现 BiMap 可以派上用场。您可以反转映射,然后使用该值作为键。所以在你的情况下, map.get(searchTerm) google-collections.googlecode.com/svn/trunk/javadoc/com/google/…
标签: java search dictionary collections linked-list