我有一个字符串HashSet,格式为:something_something_name="value"
Set<String> name= new HashSet<String>();
在我的代码中,我想检查HashSet中是否包含字符串"name"
。在这个小例子中,如果我正在检查"name"
是否是HashSet中任何值的子字符串,我希望它返回true。
我知道.contains()
无效,因为它使用.equals()
。关于处理这个问题的最佳方法的任何建议都会很棒。
答案 0 :(得分:4)
使用现有的数据结构,唯一的方法是迭代检查每个条目的所有条目。
如果这还不够好,你需要一个不同的数据结构。
答案 1 :(得分:0)
您可以保留另一个地图,其中name是键,something_something_name是值。 因此,您可以从名称 - &gt;移动something_something_name - &gt;值。如果你想要一个单独的接口,你可以围绕这两个地图编写一个包装类,公开你想要的功能。
答案 2 :(得分:0)
您可以按如下方式构建地图(名称 - &gt;字符串):
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)
答案 3 :(得分:0)
我不久前发布了MapFilter
课程here。
您可以像以下一样使用它:
MapFilter<String> something = new MapFilter<String>(yourMap, "something_");
MapFilter<String> something_something = new MapFilter<String>(something, "something_");
您需要先将容器变为Map
。
如果您多次查找子字符串,这只会值得做。