001
002package com.commercetools.api.models;
003
004import java.util.Map;
005import java.util.Optional;
006import java.util.function.Function;
007
008import javax.annotation.Nullable;
009
010/**
011 * accessor interface for map objects like attributes or custom fields
012 * @param <T> the type of the map value
013 */
014public class MapAccessor<T> {
015    private final Map<String, T> map;
016
017    public MapAccessor(Map<String, T> map) {
018        this.map = map;
019    }
020
021    @Nullable
022    public <U> U get(final String key, Function<T, U> mapFn) {
023        return Optional.ofNullable(map.get(key)).map(mapFn).orElse(null);
024    }
025
026    @Nullable
027    public T get(final String key) {
028        return map.get(key);
029    }
030}