繁体   English   中英

HashSet包含子字符串

[英]HashSet contains substring

我有以下格式的字符串HashSet: something_something_name="value"

Set<String> name= new HashSet<String>();

在我的代码中,我想进一步检查HashSet中是否包含字符串"name" 在这个小例子中,如果我要检查"name"是否为HashSet中任何值的子字符串,我希望它返回true。

我知道.contains()无法使用,因为使用.equals()可以使用。 关于解决此问题的最佳方法的任何建议都很好。

使用现有的数据结构,唯一的方法是遍历所有条目,依次检查每个条目。

如果这还不够好,那么您将需要一个不同的数据结构。

您可以保留另一个地图,其中名称是键,而something_something_name是值。 因此,您将能够从名称-> something_something_name->值移动。 如果只需要一个接口,则可以围绕这两个映射编写包装类,以公开所需的功能。

您可以按以下方式构建映射(名称->字符串):

 Map<String, List<String>> name_2_keys = new HashMap<>();
 for (String name : names) {
     String[] parts = key.split("_");
     List<String> keys = name_2_keys.get(parts[2]);

     if (keys == null) {
         keys = new ArrayList<>();
     }
     keys.add(name);
     name_2_keys.put(parts[2], keys);
 }

然后检索所有包含名称name的字符串:

 List<String> keys = name_2_keys.get(name)

MapFilter 在这里发布了MapFilter类。

您可以像这样使用它:

MapFilter<String> something = new MapFilter<String>(yourMap, "something_");
MapFilter<String> something_something = new MapFilter<String>(something, "something_");

您首先需要将容器放入Map

仅当您多次查找子字符串时,这才值得做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM