2016-03-18 2 views
-1

J'ai une carte de test HashMap;Comment lire les valeurs d'une clé avec les limites de début et de fin dans Hashmap?

Ce qui est d'avoir des données avec plusieurs clés de cette façon,

{ 
    status = [1, 2, 3, 4, 5], data = [ 
     [1, 2, 3, 4, 5, 6], 
     [7, 8 9, 10, 11, 12], 
     [13, 14 15, 16, 17, 18], 
     [19, 20, 21, 22, 23, 24], 
     [25, 26, 27, 28, 29, 30], 
    ] 
], warning = [ 
    [1, 2, 3, 4, 5, 6], 
    [7, 8 9, 10, 11, 12], 
    [13, 14 15, 16, 17, 18], 
    [19, 20, 21, 22, 23, 24], 
    [25, 26, 27, 28, 29, 30], 
], error = [1, 2, 3, 4, 5, 6], [7, 8 9, 10, 11, 12], [13, 14 15, 16, 17, 18], [19, 20, 21, 22, 23, 24], [25, 26, 27, 28, 29, 30], 
} 

Je suis en train de lire les valeurs de chaque clé de la carte ci-dessus par LIMITE limite. I.e, initialement start limit = 1 et end-limit-3, alors devrait obtenir seulement 1,2,3 valeurs de chaque clé de hashmap ci-dessus.

Ensuite, si j'envoie la limite de départ = 4 et la limite de fin-6, alors je ne devrais obtenir que 4, 5, 6 valeurs de chaque clé de la hashmap ci-dessus.

J'ai essayé cette façon,

Object firstKey = myHashMap.keySet().toArray()[3]; 
Object valueForFirstKey = myHashMap.get(firstKey); 
//iterated the values from so getting 

et a obtenu de cette façon, [data = [1,2,3]]

 Instead of this looping , can i get subset of values using both start and end index from hashmap for all the above keys like this? 
if start index=1 and end index =3 it should return me output this way, 

{ 
    status = [1, 2, 3], data = [ 
     [1, 2, 3], 
     [7, 8 9], 
     [13, 14 15], 
     [19, 20, 21], 
     [25, 26, 27], 
    ] 
], warning = [ 
    [1, 2, 3, [7, 8 9], 
     [13, 14 15], 
     [19, 20, 21], 
     [25, 26, 27], 
    ], error = [1, 2, 3], 
    [7, 8 9], 
    [13, 14 15], 
    [19, 20, 21], 
    [25, 26, 27], 
} 

sans boucle à travers chaque clé et la valeur comme ci-dessus? Quelle erreur ai-je faite?

+2

Les clés actuelles ne sont pas claires pour moi. Au lieu de simplement nous montrer JSON, pourriez-vous nous montrer un [mcve]? –

+0

@JonSkeet En fait, cette carte est créée à partir de JSOn seulement .. Et j'essaie de le manipuler .. – Sandy

+0

Donc vous pouvez le montrer (avec un jeu de données plus petit). Ou vous pourriez construire la même carte manuellement. De toute façon, vous pouvez toujours reproduire le problème d'une manière qui nous aide à le voir de manière complète. –

Répondre

0

Comme Jon Skeet a noté, on ne sait pas ce que vous demandez.

Ma meilleure estimation de ce que vous avez besoin est:

item.data 
    .SelectMany(o => o) // linarilize array of arrays 
    .Skip(i * 3)   // skip first i * 3 elements 
    .Take(3);    // take first 3 elements from remaining array 

Cet exemple est en C#, Java vous avez des méthodes plus verbeux. Si vous utilisez Java 8 alors j'imagine que vous pourriez résoudre ce problème avec:

integerListStream 
    .flatMap(Collection::stream) 
    .skip(i * 3) 
    .limit(3);