我有一个Map数据集,我想迭代键并搜索匹配项。所以我想找到maps元素,其中的键适合这个模式:
String searchedKey = "A?C"; // ? means it can be any character
Map<String, MyObject> myMap = new HashMap<>();
myMap.put("ABC", MyObject(1));
myMap.put("CDF", MyObject(2));
myMap.put("ADS", MyObject(3));
for (Map.Entry<String,MyObject> entry : myMap.entrySet()) {
// in this case, I want to find the first element, because it's key fits the searchedKey, where ? can be anything
}
我该怎么做?谢谢
您可以执行这样的操作来返回找到的MyObjects的列表。注意,我将任何字符的?
更改为.
。
String searchedKey = "A.C"; // ? means it can be any character
Map<String, MyObject> myMap = new HashMap<>();
myMap.put("ABC", new MyObject(1));
myMap.put("CDF", new MyObject(2));
myMap.put("ARS", new MyObject(3));
myMap.put("VS", new MyObject(4));
myMap.put("AQC", new MyObject(3));
myMap.put("DS", new MyObject(3));
myMap.put("ASC", new MyObject(10));
List<Map.Entry<String,MyObject>> list = myMap.entrySet().stream()
.filter(e -> e.getKey().matches(searchedKey))
.collect(Collectors.toList());
list.forEach(System.out::println);
打印
ASC=10
ABC=1
AQC=3
MyObject类
class MyObject {
int val;
public MyObject(int v) {
this.val = v;
}
public String toString() {
return val + "";
}
}
您可以使用Regex Patterns,它允许使用String#matches(String(搜索字符串以查找逻辑序列的匹配项。
这里有一个页面,可以帮助您根据需要创建和测试正则表达式。您可能还必须在运行时灵活构建模式,这取决于搜索的工作方式。
请记住,HashMap不会保持密钥插入的顺序。keySet((不会按固定顺序返回它们。如果你需要订购,你可以使用LinkedHashMap