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 + "";
    }
}