1

可以映射与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;
    }

这是正确的方法吗?

4

3 回答 3

2

你可以利用keySet(). 此方法返回一个Set键(有关更多信息,请参阅 Oracle 的有关 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;
}

为什么不使用 aInteger而不是 a String,因为您只存储数字。

于 2013-05-07T07:09:30.090 回答
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}
于 2013-05-07T07:32:41.607 回答
0

由于键是字符串,您可以使用字符串类中的匹配方法

for (Map.Entry<String, String> entry : allLobsChkBx.entrySet())
    {
      if(entry.getKey().matches(".*[123].*")){
          inScopeLobs.put(entry.getKey(), entry.getValue());
      }
    }
于 2013-05-07T07:24:11.370 回答