在transform方法中使用Map中的String键接收Object

时间:2014-07-04 11:42:31

标签: java hashmap

我对这些代码行有一个奇怪的问题(for循环仅用于我的调试):

  protected final List<Long> extractIdFromResult(Map<String, Object> pResult, String pKey) {
    for (String key : pResult.keySet()) {
      Object o = pResult.get(key);
      if (null == o){
        System.out.println("is null");
      }
    }
    return new SqlArrayExtractor<Long>(pResult.get(pKey)).extract(new Transformer() {
      @Override
      public Long transform(Object pInput) {
        return Long.valueOf(((BigDecimal) pInput).longValue());
      }
    });
  }

调用该方法从StoredProcedure中提取id(long)。 永远不会将is null写入控制台,因为if (null == o){不为空,我永远不会输入o。 然而,如果我输入public Long transform(Object pInput) pInput,则始终为空!

怎么会发生这种情况?该行非常有用:Object o = pResult.get(key);

感谢您的帮助

的Stefan

1 个答案:

答案 0 :(得分:1)

pKey可能在地图中不可用,因此请运行以下代码以检查它是否存在。 循环永远不会为空,因为你正在迭代你从地图获得的键集。

protected final List<Long> extractIdFromResult(Map<String, Object> pResult, String pKey) {
    System.out.println("is pKey available in map "+pResult.get(pKey));
    // There is a chance that the pKey can be something which is not available in the map.
    return new SqlArrayExtractor<Long>(pResult.get(pKey)).extract(new Transformer() {
      @Override
      public Long transform(Object pInput) {
        return Long.valueOf(((BigDecimal) pInput).longValue());
      }
    });
}