Java 避免在映射中存储null

Java 避免在映射中存储null,java,map,Java,Map,我有一种方法,可以在参数中获取patientid和scriptInfo。但如果我把它们设为null,那么null存储在Map中,因为null被存储,所以Map的大小会增加 我希望,如果我接收到这个参数为null,那么我根本不想存储它们,因为null本身不是存储在Map中的值,对我没有用处 private Map<String, List<String>> getValidatedPatientData(ITransaction transaction, String pa

我有一种方法,可以在参数中获取
patientid
scriptInfo
。但如果我把它们设为null,那么null存储在Map中,因为null被存储,所以Map的大小会增加

我希望,如果我接收到这个参数为null,那么我根本不想存储它们,因为null本身不是存储在Map中的值,对我没有用处

private Map<String, List<String>> getValidatedPatientData(ITransaction transaction, String patientId, String scriptInfo) 
  {


      ppvValidatedinfo = new HashMap<String, List<String>>(); // 
      List<String> scriptDetails = new ArrayList<String>();
      scriptDetails.add(scriptInfo);
      ppvValidatedinfo.put(patientId, scriptDetails);
      transaction.setValue(ITransactionHashtableWag.VALIDATED_PPV_PH_NBR, ppvValidatedinfo);

    return ppvValidatedinfo;
  }
私有映射getValidatedPatientData(ITransaction事务,字符串patientId,字符串scriptInfo)
{
ppvValidatedinfo=新HashMap();//
List scriptDetails=new ArrayList();
scriptDetails.add(scriptInfo);
ppvValidatedinfo.put(patientId,scriptDetails);
transaction.setValue(ITransactionHashtableWag.VALIDATED\u PPV\u PH\u NBR,ppvValidatedinfo);
返回ppvValidatedinfo;
}

在方法的开头,假设返回的映射需要在别处修改:

if (patientId == null || scriptInfo == null)
    return new HashMap<String, List<String>>();

无论如何,我都主张使用。

java.util.HashMap
支持
null
作为键值。您应该将
不为空
选中

if (patientId != null || scriptInfo != null){...}

这里有一个关于这个的讨论:

如果您打算指出,返回null通常是最好的主意 没有可用的数据

空对象表示已返回数据,而返回null 清楚地表明没有归还任何物品

因此,我认为您应该返回null,然后进行适当的验证

if (patientId == null || scriptInfo == null)
    return null;
else {
   ...
}

只需使用
ConcurrentHashMap
,它不仅支持您的需求,而且是线程安全的

标点符号很好,应该加以采纳。
if(patientId!=null)ppvValidatedinfo.put(patientId,scriptDetails)?嗯。。。检查它是否为空并发出错误信号,也许?这是你的代码吗?如果是,那么您应该知道如何检查NOTNULL并忽略将其放入映射。或者你是从其他人那里得到代码的?@RobertH:像这样:
{;}
?Lopez,你能解释一下,如果我们得到任何空值,为什么我们会返回一个新的hashmap。因为你会这样做。@user1982609如果可以避免的话,返回空值是个坏主意。否则,如果返回值为null,则必须检查此方法的调用点。要了解我的意思,请查看我将使用的
返回集合.emptyMap()
(除非返回的映射需要是可变的)。@assylias您能详细解释一下我没有了解空的概念吗。。。当他创建一个局部变量时,为什么线程安全性很重要?这没有什么意义。
if (patientId == null || scriptInfo == null)
    return null;
else {
   ...
}