如何使用map.key包含String值?

时间:2016-09-16 05:52:23

标签: java arrays string hashmap

我有大量的String

String[] mass = new String[]{"textp1","textp2tt","txtp3gfsdg","txtp4rfgsf"}//each element contains substring p1,p2,p3,p4

并且

Map<String, String> map = new HashMap<>();
map.put("p1","blablabla");
map.put("p2","blablabla");
map.put("p3","blablabla");
map.put("p4","blablabla");

我希望用地图的键

包含质量的每个元素
for (String s : mass ) {
  if (s.contains(map.key)) form.setField(map.key,map.value);
 }

我怎么能意识到这一点? Maby不是Map?

我想要方法

public void method(String[] mass, Map<String, String> map){
for (String s : mass ) {
      if (s.contains(map.key)) form.setField(map.key,map.value);
     }
}

修改

我想创建像config一样的地图,并将参数传递给方法。我有一些String的大量,我需要解析它。只能输入1个参数p1或p999

2 个答案:

答案 0 :(得分:3)

正如我所看到的,您要求对mass变量中的每个字符串询问是否存在任何子字符串,表示Map中的键

如果情况如此,那么您希望获得多个循环,一个循环遍历您的String,另一个循环遍历您的Map

for (String s : mass ) {        
    for (Map.Entry<String, String> entry : map.entrySet())  {
        if (s.contains(entry.getKey())) {
            form.setField(entry.getKey(), entry.getValue());
            break;
        }
    }
}

答案 1 :(得分:1)

这是使用流的解决方案:

for (String s : mass ) {  
    Optional<String> key = map.keySet().parallelStream().filter(s::contains).findFirst();
    if(key.isPresent()) {
        form.setField(key.get(), map.get(key.get()));
    }
}

想法是为每个字符串过滤映射并检查当前字符串中是否包含键。