@Override public ObjectConverter<Entry<K,V>, Entry<SK,SV>> inverse() { if (inverse == null) { inverse = new DerivedMap<>(null, keyInverse, valueInverse); } return inverse; } }
@Override public ObjectConverter<Entry<K,V>, Entry<SK,SV>> inverse() { if (inverse == null) { inverse = new DerivedMap<>(null, keyInverse, valueInverse); } return inverse; } }
/** * Creates a new derived map from the specified storage map. * * @param storage the map which actually store the entries. * @param keyConverter the converter for the keys. * @param valueConverter the converter for the values. */ static <SK,SV,K,V> Map<K,V> create(final Map<SK,SV> storage, final ObjectConverter<SK,K> keyConverter, final ObjectConverter<SV,V> valueConverter) { final Set<FunctionProperty> kp = keyConverter.properties(); final Set<FunctionProperty> vp = valueConverter.properties(); if (kp.contains(FunctionProperty.INVERTIBLE)) { if (vp.contains(FunctionProperty.INVERTIBLE)) { return new Invertible<>(storage, keyConverter, valueConverter); } return new InvertibleKey<>(storage, keyConverter, valueConverter); } if (vp.contains(FunctionProperty.INVERTIBLE)) { return new InvertibleValue<>(storage, keyConverter, valueConverter); } return new DerivedMap<>(storage, keyConverter, valueConverter); }
/** * Creates a new derived map from the specified storage map. * * @param storage the map which actually store the entries. * @param keyConverter the converter for the keys. * @param valueConverter the converter for the values. */ static <SK,SV,K,V> Map<K,V> create(final Map<SK,SV> storage, final ObjectConverter<SK,K> keyConverter, final ObjectConverter<SV,V> valueConverter) { final Set<FunctionProperty> kp = keyConverter.properties(); final Set<FunctionProperty> vp = valueConverter.properties(); if (kp.contains(FunctionProperty.INVERTIBLE)) { if (vp.contains(FunctionProperty.INVERTIBLE)) { return new Invertible<>(storage, keyConverter, valueConverter); } return new InvertibleKey<>(storage, keyConverter, valueConverter); } if (vp.contains(FunctionProperty.INVERTIBLE)) { return new InvertibleValue<>(storage, keyConverter, valueConverter); } return new DerivedMap<>(storage, keyConverter, valueConverter); }