避免在Map中存储null

时间:2013-01-22 16:29:30

标签: java map

我有一种方法可以在参数中获得patientidscriptInfo。但是如果我将它们作为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;
  }

4 个答案:

答案 0 :(得分:1)

在方法的开头,假设需要在其他地方修改返回的地图:

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

或者,如果我不修改返回的地图,请使用emptyMap()

if (patientId == null || scriptInfo == null)
    return new Collections.emptyMap();

无论哪种方式,我都在倡导使用Null Object Pattern

答案 1 :(得分:0)

java.util.HashMap支持null作为关键值。你应该检查not null

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

答案 2 :(得分:0)

这里有一个关于此问题的讨论:Should functions return null or an empty object?

  

如果您打算表明,那么返回null通常是最好的主意   没有数据可用。

     

空对象意味着已返回数据,而返回null   清楚地表明没有任何回报。

所以,我认为你应该只返回null并在以后进行适当的验证

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

答案 3 :(得分:0)

只需使用ConcurrentHashMap,不仅支持您的要求,而且还支持线程安全!