将map键与字符串列表进行比较

时间:2013-05-07 07:05:29

标签: java map comparison

可以映射与java中字符串的arraylist进行比较

private Map<String, String> checkInScopeLobs(Map<String, String> allLobsChkBx)
    {
        Map<String, String> inScopeLobs = new HashMap<String, String>();; 
        for (Map.Entry<String, String> entry : allLobsChkBx.entrySet())
        {
          if(entry.getKey().contains("1") || entry.getKey().contains("2") || entry.getKey().contains("3")){
              inScopeLobs.put(entry.getKey(), entry.getValue());
          }
        }
        return inScopeLobs;
    }

这是正确的方法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用keySet()。此方法返回Set个键(有关详细信息Docs from Oracle about Map)。这意味着比在整个地图上迭代更少的开销。在以下情况中,您只需要匹配键的值。

还有一些其他错误,例如双分号,因为JDK7,您不必在初始化时定义地图。

private Map<String, String> checkInScopeLobs(Map<String, String> allLobsChkBx) {
    Map<String, String> inScopeLobs = new HashMap();
    List<String> keys = Arrays.asList( { "1", "2", "3" } );
    for(String key : allLobsChkBx.keySet()) {
        if(keys.contains(key)) {
            inScopeLobs.put(key, allLobsChkBx.get(key));
        }
    }
    return inScopeLobs;
}

为什么不使用Integer代替String,因为您只存储数字。

答案 1 :(得分:0)

由于key是String,您可以使用String类的匹配方法

for (Map.Entry<String, String> entry : allLobsChkBx.entrySet())
    {
      if(entry.getKey().matches(".*[123].*")){
          inScopeLobs.put(entry.getKey(), entry.getValue());
      }
    }

答案 2 :(得分:0)

实际上没有这样的方法,但你可以尝试这种方法:

Map<String, String> allLobsChkBx = new HashMap<String, String>(4);
allLobsChkBx.put("1", "A");
allLobsChkBx.put("2", "B");
allLobsChkBx.put("3", "C");
allLobsChkBx.put("4", "D");
allLobsChkBx.put("5", "E");

System.out.println("Before retain: " + allLobsChkBx);
List<String> keysToRetain = Arrays.asList(new String[] { "1", "2", "3" });
allLobsChkBx.keySet().retainAll(keysToRetain);
System.out.println("After retain: " + allLobsChkBx);

它将产生以下输出:

Before retain: {3=C, 2=B, 1=A, 5=E, 4=D}
After retain: {3=C, 2=B, 1=A}