¿Dónde está LazyMap de Google-colección?
-
19-09-2019 - |
Pregunta
Uno de mis favoritos de Apache Commons-colecciones fue el LazyMap que utilizar un transformador para crear instancias de valores sobre la marcha cuando se hace map.get(newKey); // Will not return null!
.
¿Por qué no google colecciones tienen la misma?
Solución
desde 10,0, guayaba tiene una nueva clase CacheBuilder vez, y es compatible con GWT.
Otros consejos
Se llama new MapMaker().makeComputingMap(Function<? super K, ? extends V> computer)
impresionante.
Tenga en cuenta que el fabricante mapa es una fábrica - se puede hacer uno, establecer todos los tipos de referencia de objetos, propiedades de expansión (e incluso oponerse tiempo de caducidad!), Y luego ir sobre la creación de una gran cantidad de mapas (u otros tipos de computación ) con una línea llama.
por ejemplo. como casi todo lo demás acerca de la biblioteca de Google-colecciones, que es muy bueno - una vez que haya descubierto en 'eso' es
Sugiero que escribir su propio
public class LazyMap<K, V> extends ForwardingMap<K, V> {
final Function<? super K, ? extends V> factory;
final Map<K, V> delegate;
public static <K, V> LazyMap<K, V> lazyMap(final Map<K, V> map, final Supplier<? extends V> supplier) {
return new LazyMap<>(map, supplier);
}
public static <K, V> LazyMap<K, V> lazyMap(final Map<K, V> map, final Function<? super K, ? extends V> factory) {
return new LazyMap<>(map, factory);
}
private LazyMap(final Map<K, V> map, final Function<? super K, ? extends V> factory) {
this.factory = factory;
this.delegate = map;
}
private LazyMap(final Map<K, V> map, final Supplier<? extends V> supplier) {
this.factory = Functions.forSupplier(supplier);
this.delegate = map;
}
@Override
protected Map<K, V> delegate() {
return delegate;
}
@Override
public V get(final Object key) {
if (delegate().containsKey(key) == false) {
@SuppressWarnings("unchecked")
final K castKey = (K) key;
final V value = factory.apply(castKey);
delegate().put(castKey, value);
return value;
}
return delegate().get(key);
}
}