Java HashMap键是否适合某个模式



我有一个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

最新更新