2012-03-29 20 views
5

Estoy tratando de iterar solo los primeros valores "n" en mi Mapa, ¿hay algún método disponible o necesito controlarlo solo con una variable de conteo?Cómo recuperar los primeros 10 pares de valores clave en HashMap

A continuación se muestra un ejemplo, he ordenado un grupo de nombres que pertenecen a la misma ciudad. Ahora solo quiero los primeros 10 nombres de ciudades y personas en él.

for (Map.Entry<String, List<String>> entry : map.entrySet()) { 
    List<String> list = entry.getValue(); 
    // Display list of people in City 
} 

¿Hay una implementación de mapa que pueda contener un número fijo de pares clave, valor? Por favor, obtenga algunas direcciones.

Gracias,

-Vijay selvaraj

+2

¿Desea evitar la adición de más de 10 entradas o desea 10 entradas o desea las 10 primeras entradas agregadas? Más detalles. –

+0

Mi objetivo es tener 10 entradas. Ahora lo estoy completando y luego tomando un subconjunto del todo. Pero puedo detenerme cuando llegue a 10 entradas. –

Respuesta

9

Cómo Recuperar la primera 10 pares de valores clave en HashMap

HashMapis unordered. Esto hace que la pregunta esté mal planteada (a menos que con "primero" se refiera a "arbitraria").

Si desea un pedido consistente de claves, debe cambiar el tipo de su mapa a SortedMap, como TreeMap.

Alternativamente, si se trata de los elementos más antiguos que busca (es decir, los que ha insertado primero), entonces LinkedHashMap es la respuesta.

En cuanto a obtener los primeros elementos n, un bucle con un contador es una forma bastante razonable de hacerlo.

2
List<List<string>> list = new ArrayList<List<String>>(); 
for (Map.Entry<String, List<String>> entry : map.entrySet()) { 
    if (list.size() > 9) break; 
    list.add(entry.getValue()); 
} 
+1

OP declaró que él sabe cómo hacer esto con la variable de contador –

3

Estoy tratando de recorrer sólo los primeros valores de "n" en mi mapa, ¿hay algún método disponible o que necesito para controlarlo solo con una variable de conteo

Lo más parecido encontrará usando sólo las colecciones API estándar (que todavía es ligeramente peor que una variable de contador OMI) es la siguiente:

List<Map.Entry<String, List<String>> entryList = 
     new ArrayList<Map.Entry<String, List<String>>(map.entrySet()); 

for (Map.Entry<String, List<String>> entry : entryList.subList(0, 10)) { 
    List<String> list = entry.getValue(); 
    // Display list of people in City 
} 

Los parámetros de tipo largas podrían evitarse ya sea mediante el uso de los diamantes de fantasía de Java 7:

List<Map.Entry<String, List<String>> entryList = new ArrayList<>(map.entrySet()); 

o mediante el uso de iterar sobre las claves y los valores correspondientes .get.

+0

Acabo de mirar tanto Hashmap como Set, no hay un método de sublista, cuídate de decirnos de dónde vino eso? – Churk

+1

@Churk: vino del 'ArrayList' que se construyó con el contenido de' map.entrySet() '. – NPE

+0

@aix map.entrySet() devuelve un conjunto, no una lista de arrays – Churk

Cuestiones relacionadas