2013-10-16 65 views
2

我有一個字符串格式一個HashSet:something_something_name="value"HashSet的包含子

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

在我的代碼再往下我想檢查一個字符串"name"包括在HashSet的。在這個小例子中,如果我檢查"name"是否是HashSet中任何值的子字符串,我希望它返回true。

我知道.contains()將不起作用,因爲它使用.equals()。有關處理此問題的最佳方法的任何建議都會很好。

+0

你將不得不遍歷每個元素的集合和調用子字符串 – RamonBoza

回答

4

使用您現有的數據結構,唯一的方法是遍歷所有條目,依次檢查每個條目。

如果這還不夠好,您需要一個不同的數據結構。

+0

我想知道是否可能是這種情況。謝謝。 – joshft91

0

您可以保留另一個映射,其中名稱是鍵,而something_something_name是值。 因此,您可以從名稱 - > something_something_name - >值移動。如果你想要一個接口,你可以在這兩個地圖上編寫一個包裝類,展現你想要的功能。

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) 
0

我貼了MapFilterhere一會兒前。

你可以使用它像:

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

你需要讓你的容器放入首先Map

如果你多次查找子字符串,這將是值得的。