Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查映射中的键是否以给定的字符串值开头_Java_String_Map - Fatal编程技术网

Java 如何检查映射中的键是否以给定的字符串值开头

Java 如何检查映射中的键是否以给定的字符串值开头,java,string,map,Java,String,Map,我正在寻找一种方法,如: myMap.containsKeyStartingWith("abc"); // returns true if there's a key starting with "abc" e.g. "abcd" 或 我想知道是否有人知道这样做的简单方法 感谢您,您可以从地图中获得一组键,如果它们是字符串,您可以在该集合的元素上迭代,并检查是否有startsWith(“abc”)这可以通过标准: Map tailMap=myMap.tailMap(前缀); 布尔结果=(!ta

我正在寻找一种方法,如:

myMap.containsKeyStartingWith("abc"); // returns true if there's a key starting with "abc" e.g. "abcd"

我想知道是否有人知道这样做的简单方法


感谢您,您可以从地图中获得一组键,如果它们是字符串,您可以在该集合的元素上迭代,并检查是否有
startsWith(“abc”)

这可以通过标准:

Map tailMap=myMap.tailMap(前缀);
布尔结果=(!tailMap.isEmpty()&&tailMap.firstKey().startsWith(前缀));

未排序的映射(例如,
HashMap
)本质上不支持前缀查找,因此对于那些映射,您必须迭代所有键。

要在Adel Boutros关于迭代键效率的回答/评论的基础上,您可以将键迭代封装在
映射
子类或装饰器中


扩展
HashMap
将为您提供一个类来放入方法,并将特定于映射的代码保留在方法之外,从而降低复杂性并使代码更自然易读。

谢谢,尽管我希望不必反复使用该键,但我可以看出这是可行的set@Edd为什么不呢?java开发人员对此进行了优化,以便以这种方式使用;)它会导致更高的圈复杂度,除非你把它拉到一个单独的方法中,我没有明显的类来放置这样一个方法,所以我希望我不需要为地图创建一个新的实用程序类,其中只有一个方法。。。当我这么说的时候,听起来好像我很懒,但是如果有一个现成的实用方法来解决这个问题的话,它会有所帮助。。。一厢情愿;)在映射键上迭代效率较低:是O(N)。排序映射可以做得更好:O(log N)。@martiell但他没有指定他使用的映射类型,因为我使用的是hashmap我收集的我可以通过以下方式创建树映射:
TreeMap TreeMap=new TreeMap();树映射putAll(hashMap)
@Edd:或者更简单的是,
TreeMap TreeMap=newtreemap(hashMap)这意味着我的HashMap需要是扩展HashMap的一个实例,并且我必须从Map执行强制转换(如果Map被声明为Map)才能使用该方法。它确实把代码放在了一个整洁的地方,但可能不会那么有用。或者你可以做
MyMapExtension m=新建MyMapExtension(myMap)或者您可以使用装饰器解决方案来包装地图。这两本书读起来都和你原来的想法相似。我明白了。。。我认为decorator选项将阻止创建映射的新实例,因此应该更有效
MapUtils.containsKeyStartingWith(myMap, "abc"); // same
Map<String,V> tailMap = myMap.tailMap(prefix);
boolean result = (!tailMap.isEmpty() && tailMap.firstKey().startsWith(prefix));