2016-03-18 9 views
-1

У меня есть тестовая карта HashMap;Как читать значения ключа с начальным и конечным пределом в Hashmap?

Который имея данные с несколькими ключами таким способом,

{ 
    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], 
} 

Я пытаюсь прочитать значения из каждого ключа из выше предельному по пределу.

I.e, изначально начальный предел = 1 и конечный предел-3, то он должен получать только 1,2,3 значения от каждой клавиши выше хэш-карты.

Тогда, если я отправлю начальный предел = 4 и конечный предел -6, тогда будет получать только 4,5,6 значения из каждого ключа выше hashmap.

Я попробовал этот путь,

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

и получил таким образом, [данных = [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], 
} 

без зацикливания через каждый ключ и значение, как описано выше? Какую ошибку я сделал?

+2

Непонятно, каковы фактические ключи. Вместо того, чтобы просто показать нам JSON, вы могли бы показать нам [mcve]? –

+0

@JonSkeet Фактически эта карта создается только из JSOn. И я пытаюсь манипулировать ею. – Sandy

+0

Итак, вы можете показать это (с меньшим набором данных). Или вы можете создать одну и ту же карту вручную. В любом случае, вы все равно можете воспроизвести проблему таким образом, чтобы помочь нам полностью понять ее. –

ответ

0

Как Джон Скит отметил, что непонятно, что вы просите.

Моя догадка, что вам нужно:

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 

Этот пример находится в C#, в Java у вас есть более подробные методы. Если вам удастся использовать Java 8, то я могу предположить, что вы могли бы решить эту проблему с помощью:

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