varios studio marcadores google geolocalizacion agregar java guava

java - studio - Filtrado de multimapas de guayaba



geolocalizacion android studio google maps (4)

Después de reflexionar, no creo que haya una manera de crear una vista filtrada de un ImmutableMultimap por una muy buena razón. Si un objeto espera un ImmutableMultiMap, esperaría que ese objeto no pareciera cambiar durante la vida útil del objeto. La aplicación de un filtro, que podría funcionar dinámicamente, rompería el contrato implícito (o posible escrito por todo lo que sé), ya que parecería que entre las llamadas a varios métodos, el mapa, de hecho, había mutado.

¿Existe un método integrado o una combinación de métodos para devolver una vista filtrada de los mapas instantáneos de guayaba usando predicados, como se puede hacer con mapas regulares?

No parece haber un método Maps.filter que acepte un ImmutableMultimap como parámetro. Mirando la API, podría llamar a asMap () y obtener una vista basada en el mapa del multimap y realizar el filtro de esa manera. Sin embargo, necesito devolver un ImmutableMultimap desde mi función y, por razones obvias, no hay una manera de ver un Mapa> como ImmutableMultimap, sin tener que construir un nuevo Multimap.

Incluso si pudiera filtrarlo como un Mapa y volver a convertirlo en un ImmutableMultimap ya que solo son vistas (¿creo?), Los métodos de filtro solo me permitirían filtrar la colección en su conjunto y no eliminar los valores individuales.


En lugar de copiar el multimapa inmutable completo, debe intentar utilizar un Multiplicador de Reenvío y aplicar el filtro cuando se consulta el mapa, por ejemplo

@Override public boolean containsKey(@Nullable Object key) { if (!keyFilter.apply(key)) return false; return super.containsKey(key); } @Override public boolean containsEntry(@Nullable Object key, @Nullable Object value) { .. } @Override public Collection<V> get(@Nullable K key) { if (!keyFilter.apply(key)) return Collections.emptyList(); return Collections2.filter(delegate().get(key), valueFilter); }

y así.



public static <Type1, Type2> ImmutableMultimap<Type1, Type2> dFilter( ImmutableMultimap<Type1, Type2> data,// Predicate<Type1> predicate// ) { Multimap<Type1, Type2> result = HashMultimap.create(); for (Type1 t1 : data.keys()) if (predicate.apply(t1)) for (Type2 t2 : data.get(t1)) result.put(t1, t2); return ImmutableMultimap.copyOf(result); }

¿Hay un método incorporado ...

No.