3

I have a HashSet of Strings in the format: something_something_name="value"

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

Farther down in my code I want to check if a String "name" is included in the HashSet. In this little example, if I'm checking to see if "name" is a substring of any of the values in the HashSet, I'd like it to return true.

I know that .contains() won't work since that works using .equals(). Any suggestions on the best way to handle this would be great.

4

4 回答 4

5

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

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

于 2013-10-16T15:08:25.510 回答
0

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

于 2013-10-16T15:13:21.627 回答
0

您可以按如下方式构建地图(名称 -> 字符串):

 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)
于 2013-10-16T15:18:15.677 回答
0

不久前我在这里发布了一个MapFilter课程。

你可以像这样使用它:

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

你需要把你的容器变成Map第一个。

如果您多次查找子字符串,这将是值得的。

于 2013-10-16T15:21:58.047 回答