【问题标题】:java: Map view that hides the entry with a null key?java:使用空键隐藏条目的地图视图?
【发布时间】:2011-05-05 17:06:04
【问题描述】:

我有一个Map<String,String>,它包含一个带有空键的特殊值。改变东西不是那么容易,所以我没有这个。

有没有办法做到以下几点:

  • 查看此地图,该地图也是 Map<String,String>,它隐藏了空键条目
  • 查看地图的keySet(),它隐藏了空键条目

我所说的“视图”是指地图的变化会产生视图的变化。

我认为后者更容易,但我不知道该怎么做。

【问题讨论】:

  • 请在标题中保留“java”。我无法告诉您我在“相关”下搜索问题或查看问题的次数,这听起来很有希望,但问题所指的语言与我需要了解的语言不同

标签: java map transform


【解决方案1】:

如果带有 null 键的值是一种特殊情况,并且不打算在您访问条目时使用,为什么它会出现在映射中?您决定将其放在地图中而不是使用不同的字符串变量是否有原因?

听起来使用不同的方法会更容易,而不是尝试扩展地图以具有针对这种情况的一些特殊属性。这也将更明确地表明此字符串值是一个特殊值,而不是可能会绊倒必须在您之后查看此代码的未来开发人员的东西。

【讨论】:

    【解决方案2】:

    简单的方法是扩展您的地图并覆盖检查空键值的正确方法。这些将是:

    containsKey(Object key)
    entrySet() 
    get(Object key) 
    keySet() 
    put(K key, V value) 
    putAll(Map<? extends K,? extends V> m) 
    

    您还可以实现自己的对象扩展 Map 并在构造函数中传递您的 Map-with-null 并在调用上述方法之一时执行检查/控制。

    如果您对外部库开放,可以查看PredicatedMap

    【讨论】:

      【解决方案3】:

      我用的是 Guava 的Maps.filterKeys();效果很好。

       Maps.filterKeys(mymap, new Predicate<String>() {
          @Override public boolean apply(String key) { return key != null; } 
       }),
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-21
        • 2017-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多