我是编程新手,下面需要一个逻辑

服务包含(这是一个列表)

XX04|N|abc.02
XX04|N|abc.03
XX04|N|xyz.03
XX04|N|xyz.02
XX04|N|deg.01

entry Map contains

abc.def.01-abc.02
abc.def.01-xyz.02
abc.max.01-xyz.01

 for(String test: entry.getValue()){
   if(Service.contains(test){
     //Logic here to take only those services(Like
     XX04|N|abc.02
     XX04|N|xyz.02
     XX04|N|deg.01
 }

最佳答案

预先,我建议不仅使用字符串,而且还使用包含某些ID的getter方法的对象来对此建模。

我知道将假设地图的内容始终与正则表达式匹配

\w*\.\w*\.\d*-\w*\.\d*


并且服务始终与

\w*\d*\|N\|[A-z0-9.]*


然后,您可以使用正则表达式使用命名的捕获组来提取字符串的id部分。

Pattern servicePattern = Pattern.compile("\\w*\\d*\\|N\\|(?<id>\\w*\\.\\d*)");
Pattern entryPattern = Pattern.compile("\\w*\\.\\w*\\.\\d*-(?<id>\\w*\\.\\d*)");

for (String name : entry.getValue()) {
    Matcher entryMatcher = entryPattern.matcher(name);
    Assume.true(entryMatcher.matches());

    String id = entryMatcher.group("id");

    for (String serviceName : Service) {
        Matcher serviceMatcher = servicePattern.matcher();
        if (serviceMatcher.matches()) {
            if (id.equals(serviceMatcher.group("id"))) {
                // do what ever you want with the service
            }
        }
    }
}

09-05 00:44