Class TransformingMap<K,​InternalV,​ExternalV>

  • All Implemented Interfaces:
    java.util.Map<K,​ExternalV>

    public final class TransformingMap<K,​InternalV,​ExternalV>
    extends java.util.AbstractMap<K,​ExternalV>
    A TransformingMap contains an internal Map<K, InternalV> values, and exposes the features of a Map<K, ExternalV> applying transformations to the values.

    The transformations are applied "just in time", that is, the values are converted only when they are used, not during the construction of the TransformingMap.

    For instance, if you have a Map<String, String> and you want to convert its values "just in time" to integers, you use a TransformingMap<String, String, Integer>. To get one, you create these three functions:

    • one that converts a String to an Integer: that's the parse transformation. It converts an Integer read from the internal map to a String.
    • one that converts an Integer to a String: that's the write transformation. It converts a String given to the TransformingMap to an Integer.
    • one that converts an Object to another Object: that's the search transformation. It is used (mainly) by the containsKey(Object) method of the TransformingMap. If its argument is an Integer then it should convert it to an String in the same way as the write transformation. Otherwise, it is free to try to convert it to a String if possible, or not to.
    • Constructor Detail

      • TransformingMap

        public TransformingMap​(java.util.Map<K,​InternalV> map,
                               java.util.function.Function<? super InternalV,​? extends ExternalV> readTransformation,
                               java.util.function.Function<? super ExternalV,​? extends InternalV> writeTransformation,
                               java.util.function.Function<java.lang.Object,​java.lang.Object> searchTransformation)
        Create a new TransformingMap.
        Parameters:
        map - the internal map to use
        readTransformation - the parse transformation (see javadoc of the class)
        writeTransformation - the write transformation (see javadoc of the class)
        searchTransformation - the search transformation (see javadoc of the class)
    • Method Detail

      • size

        public int size()
        Specified by:
        size in interface java.util.Map<K,​InternalV>
        Overrides:
        size in class java.util.AbstractMap<K,​ExternalV>
      • isEmpty

        public boolean isEmpty()
        Specified by:
        isEmpty in interface java.util.Map<K,​InternalV>
        Overrides:
        isEmpty in class java.util.AbstractMap<K,​ExternalV>
      • containsKey

        public boolean containsKey​(java.lang.Object key)
        Specified by:
        containsKey in interface java.util.Map<K,​InternalV>
        Overrides:
        containsKey in class java.util.AbstractMap<K,​ExternalV>
      • containsValue

        public boolean containsValue​(java.lang.Object value)
        Specified by:
        containsValue in interface java.util.Map<K,​InternalV>
        Overrides:
        containsValue in class java.util.AbstractMap<K,​ExternalV>
      • get

        public ExternalV get​(java.lang.Object key)
        Specified by:
        get in interface java.util.Map<K,​InternalV>
        Overrides:
        get in class java.util.AbstractMap<K,​ExternalV>
      • remove

        public ExternalV remove​(java.lang.Object key)
        Specified by:
        remove in interface java.util.Map<K,​InternalV>
        Overrides:
        remove in class java.util.AbstractMap<K,​ExternalV>
      • putAll

        public void putAll​(java.util.Map<? extends K,​? extends ExternalV> m)
        Specified by:
        putAll in interface java.util.Map<K,​InternalV>
        Overrides:
        putAll in class java.util.AbstractMap<K,​ExternalV>
      • clear

        public void clear()
        Specified by:
        clear in interface java.util.Map<K,​InternalV>
        Overrides:
        clear in class java.util.AbstractMap<K,​ExternalV>
      • keySet

        public java.util.Set<K> keySet()
        Specified by:
        keySet in interface java.util.Map<K,​InternalV>
        Overrides:
        keySet in class java.util.AbstractMap<K,​ExternalV>
      • values

        public java.util.Collection<ExternalV> values()
        Specified by:
        values in interface java.util.Map<K,​InternalV>
        Overrides:
        values in class java.util.AbstractMap<K,​ExternalV>
      • entrySet

        public java.util.Set<java.util.Map.Entry<K,​ExternalV>> entrySet()
        Specified by:
        entrySet in interface java.util.Map<K,​InternalV>
        Specified by:
        entrySet in class java.util.AbstractMap<K,​ExternalV>
      • getOrDefault

        public ExternalV getOrDefault​(java.lang.Object key,
                                      ExternalV defaultValue)
      • forEach

        public void forEach​(java.util.function.BiConsumer<? super K,​? super ExternalV> action)
      • replaceAll

        public void replaceAll​(java.util.function.BiFunction<? super K,​? super ExternalV,​? extends ExternalV> function)
      • remove

        public boolean remove​(java.lang.Object key,
                              java.lang.Object value)
      • computeIfAbsent

        public ExternalV computeIfAbsent​(K key,
                                         java.util.function.Function<? super K,​? extends ExternalV> mappingFunction)
      • computeIfPresent

        public ExternalV computeIfPresent​(K key,
                                          java.util.function.BiFunction<? super K,​? super ExternalV,​? extends ExternalV> remappingFunction)
      • compute

        public ExternalV compute​(K key,
                                 java.util.function.BiFunction<? super K,​? super ExternalV,​? extends ExternalV> remappingFunction)