2010-01-22 16 views
9

Estoy tratando de tener un Multimap (basado en hash) con un Multiset (basado en hash) de valores para cada clave. Vea el ejemplo:Multimap con HashMultiset para los valores

Multimap<Object, Object> mmap = Multimaps.newMultimap(
    Maps.<Object, Collection<Object>>newHashMap(), 
    new Supplier<Collection<Object>>() { 
    public Collection<Object> get() { 
    return HashMultiset.create(); 
    } 
}); 
mmap.put("1", "2"); 

Pero entonces,

System.out.println(mmap.get("1") instanceof Multiset<?>); 
//false, the returned collection is not a HashMultiset, 
//but a (private) WrappedCollection 

por lo que parece que no puedo acceder al conjunto múltiple creé? Quería poder devolver eso, como un Multiset (incluido en Multisets.unmodifiableMultiset()). Tampoco quiero copiarlo en un nuevo Multiset cada vez. ¿Tengo alguna otra opción que cambiar de nuevo a Map<K, Multiset<V>> y agregar en mi código la complejidad que el Multimap quiso eliminar?

Respuesta

6

Me temo que esto no parece posible. Debe presentar una solicitud de función. Tengo la sospecha de que esas astutas personas de Google tienen un ingenioso tipo de Multimap que potencialmente podrían lanzar que podría ayudarte.

+0

Oh, bueno, eso es lo que sospechaba, gracias de todos modos. No estoy exactamente seguro de qué función pedir (ya que siempre existe el peligro de obtenerlo :)). PD: ¡eres tan reservado a veces! –

+2

Me gustaría esto también. ¿No hay posibilidad de que haya sucedido en los últimos ≳4 años? –

+1

Ay, no, hemos perdido la fe en la solución particular que antes pensábamos que podríamos liberar. –

0

El Multimap interface solo especifica que get(K) devuelve un Collection<V>. Creo que sería un mal diseño para su código el depender o asumir cualquier otra cosa.

¿Puede ampliar un poco más sobre lo que está tratando de hacer aquí? Parece que debería haber una manera más fácil de lograrlo.

+4

La versión corta de la pregunta es: "Solo quiero un multimapa donde pueda ver los valores a través de la API de Multiset, no de la API de recopilación". –

Cuestiones relacionadas