A menudo tengo la necesidad de tomar una lista de objetos y agruparlos en un Mapa basado en un valor contenido en el objeto. P.ej. tomar una lista de usuarios y agrupar por país.Acceso directo para agregar a la Lista en un HashMap
Mi código para esto por lo general se parece a:
Map<String, List<User>> usersByCountry = new HashMap<String, List<User>>();
for(User user : listOfUsers) {
if(usersByCountry.containsKey(user.getCountry())) {
//Add to existing list
usersByCountry.get(user.getCountry()).add(user);
} else {
//Create new list
List<User> users = new ArrayList<User>(1);
users.add(user);
usersByCountry.put(user.getCountry(), users);
}
}
Sin embargo no puedo evitar pensar que esto es incómodo y algún gurú tiene un mejor enfoque. Lo más cercano que puedo ver hasta ahora es el MultiMap from Google Collections.
¿Hay algún enfoque estándar?
Gracias!
En caso de que se realmente ser 'Map>'? La respuesta hace la diferencia para lo que elijas construir o usar. Tenga en cuenta que Google Collections proporciona mejoras para que las colecciones anidadas sean de varios tipos de listas y conjuntos. –
seh
Simplemente suelte Java para .Net y Linq. –
@Hamish: ¡sí, debido a nuestras preocupaciones sobre las dependencias son totalmente irrelevantes! – Carl