Java HashMap 键适合某种模式?
Java HashMap key fits to a pattern?
我有一个地图数据集,我想遍历键并搜索匹配项。
所以我想找到 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
}
我该怎么做?
谢谢!
你可以使用 Regex-Patterns that allow to search Strings for matchings of a logical sequence using String#matches(String).
Here is a page 可能会帮助您根据需要创建和测试正则表达式。您可能还必须在运行时灵活地构建您的模式,具体取决于您的搜索工作方式。
请记住,HashMap 不会保持键插入的顺序。 keySet() 不会以固定顺序 return 它们。如果您需要订购它们,您可以使用 LinkedHashMap
您可以对 return 找到的 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
MyObjectclass
class MyObject {
int val;
public MyObject(int v) {
this.val = v;
}
public String toString() {
return val + "";
}
}
我有一个地图数据集,我想遍历键并搜索匹配项。 所以我想找到 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
}
我该怎么做? 谢谢!
你可以使用 Regex-Patterns that allow to search Strings for matchings of a logical sequence using String#matches(String).
Here is a page 可能会帮助您根据需要创建和测试正则表达式。您可能还必须在运行时灵活地构建您的模式,具体取决于您的搜索工作方式。
请记住,HashMap 不会保持键插入的顺序。 keySet() 不会以固定顺序 return 它们。如果您需要订购它们,您可以使用 LinkedHashMap
您可以对 return 找到的 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
MyObjectclass
class MyObject {
int val;
public MyObject(int v) {
this.val = v;
}
public String toString() {
return val + "";
}
}