java - 在转换方法中从 Map 接收带有 String 键的对象

标签 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(Longs)。 is null 永远不会写入控制台,我也不会输入 if (null == o){ 因为 o 不为 null。 尽管如此,如果我输入 public Long transform(Object pInput) pInput 始终为 null!

怎么会发生这种事?该行效果很好:Object o = pResult.get(key);

感谢您的帮助

斯特凡

最佳答案

pKey 可能在 map 中不可用,因此运行以下代码来检查它是否可用。 循环永远不会返回 null,因为您正在迭代从映射中获取的键集。

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());
      }
    });
} 

关于java - 在转换方法中从 Map 接收带有 String 键的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24573492/

相关文章:

java - JDBC 事务与连接说明

java - Spring 启动和 RabbitMQ : Failed to connect to reactor. io.net.impl.netty.tcp.NettyTcpClient

java - 查找并获取网页发出的所有资源请求的响应码 - Java, Selenium

json - 将 <String、HashSet<String>> 映射到 JSON 和 pretty-print

java - hashcode() 仅在类对象的情况下才需要吗?

java - 静态 HashMap 初始化

php - 从 Laravel 数据库查询结果中访问明显存在的整数类型数据时出现错误 "Cannot use object of type stdClass as array"

java - 定制@Scheduled Spring

java - 在使用 Helidon Microprofile Server 时,我们可以使用 Spring 代替 CDI 和 Weld 吗?

java - Toggle 与 HashMap 相比,还能如何更好呢?