class TypedMap implements Iterable<Entry<Object, V>> {

    @NonNull
    Single<V> get(Object key) {
        if (map.containsKey(key)) {
            return Single.just(map.get(key));
        } else if (key != null && map.containsKey(key.getClass())) {
            return Single.just(map.get(key.getClass()));
        } else {
            return Single.error(new NoSuchElementException("no value mapped to : " + key));
        }
    }

      TypedMap(Map<Object, V> map);

}