Me gusta mucho la clase Multimap
de la biblioteca google guava. Es un tipo de mapa donde puede agregar múltiples valores para una clave, por lo que efectivamente se asigna desde una clave a una colección de algún tipo. Lo que más me gusta especialmente es la función Multimaps.index()
que toma un Iterable
y una función clave y devuelve un Multimap
que agrupa (o indexa o mapea) los elementos del Iterable
por el valor que devuelve la función para cada uno de esos elementos.¿Por qué guava Multimap.values () devuelve una colección plana en lugar de una colección de colecciones?
Lo que me parece un poco extraño es que Multimap.values()
devuelve una colección plana en lugar de una colección de colecciones? Entonces la agrupación que me dio la función de índice se pierde una vez Ì recuperar los valores. Puedo eludir ese problema llamando al Multimap.asMap()
y luego llamar a values () sobre eso.
¿Alguien sabe por qué puede tener sentido que Multimap
se comporte de esa manera?
Agrupar es lo que generalmente uso Multimap, así que por 'problema' me refería al problema de mi dominio, no al problema de la API de Multimap. No debería sonar como si estuviera criticando la API. Simplemente no entendí la filosofía detrás de esto. Gracias por tu respuesta. – nansen
@nansen: No es como si Multimap intentara ocultar que los dos conceptos se superponen (por ejemplo, siempre puede iterar a través de 'keys()' y hacer 'get (key)' para obtener la colección de valores para esa clave). El entendimiento es simplemente que si solicita todos los valores en el multimapa, no le importan las claves asociadas, al igual que con un mapa normal. Y para todos los demás casos, le ofrece una vista en vivo para verlo como un 'Mapa> '. Te das cuenta de que 'asMap' no hace ninguna copia, ¿verdad? Es solo una vista diferente de los mismos datos, por lo que la sobrecarga es insignificante. –
Me gusta esta visión de las cosas porque expresa un principio clave de reutilización. Como dice Alan Perlis: "Es mejor tener 100 funciones operando en una estructura de datos que 10 funciones en 10 estructuras de datos." – nansen