2015-02-12 3 views
0

Я создал ArrayList, перейдя по массиву значений, который создает массив в «общей» структуре ключа/значения.Как создать TreeMap ArrayList в Groovy

def timeWithIdentifier = [] 
for (i = 0; i <= time.size()-1; i++) { 
    timeWithIdentifier [i] = i + ":'" + time[i] + "'"; 
} 

массив выглядит следующим образом:
timeWithIdentifier = [0:'1423734900000', 1:'1423735200000', 2:'1423735500000', 3:'1423735800000', 4:'1423736100000', 5:'1423736400000', 6:'1423736700000', 7:'1423737000000', 8:'1423737300000', 9:'1423737600000', 10:'1423737900000', 11:'1423738200000', 12:'1423738500000', 13:'1423738800000', 14:'1423739100000', 15:'1423739400000', 16:'1423739700000', 17:'1423740000000', 18:'1423740300000', 19:'1423740600000', 20:'1423740900000', 21:'1423741200000', 22:'1423741500000', 23:'1423741800000', 24:'1423742100000', 25:'1423742400000']

Просить класса это через timeWithIdentifier.getClass() я получаю следующий результат java.util.ArrayList.

Теперь я хочу поставить выше комбинацию ключ/значение в новом TreeMap с помощью следующих действий: treeMapTime = new TreeMap<Integer, Long>(timeWithIdentifier)

К сожалению, я получаю следующее сообщение об ошибке

groovy.lang.GroovyRuntimeException: Не удалось найти (java.util.ArrayList)

Что мне не хватает об этом?

+0

Я думаю, вы ожидаете чего-то другого вместо 'timeWithIdentifier'. Тип этой переменной - 'ArrayList ', это не структура ключевых значений, а простой нулевой индекс, который рекомендуется для произвольного доступа, такого как структура. См. Мой ответ для более подробной информации. –

ответ

1

Т.Л., д-р:

Вот как это должно быть сделано:

def time = (1..10) 
def timeWithIdentifier = [:] 
for (i = 0; i <= time.size()-1; i++) { 
    timeWithIdentifier[i] = time[i] 
} 

new TreeMap(timeWithIdentifier) 

Объяснение:

Как можно видеть hereTreeMap не принимает ArrayList как конструктор аргумент - Map.

При обработке элементов с циклом for вы не создаете экземпляры Maps, а строки. Измените timeWithIdentifier на экземпляр Map. Добавьте товар под ключ i. Затем передайте целое timeWithIdentifier в качестве аргумента TreeMap constructor. Это может быть еще проще:

def time = (1..10) 
def timeWithIdentifier = [:] as TreeMap 
for (i = 0; i <= time.size()-1; i++) { 
    timeWithIdentifier[i] = time[i] 
} 
+0

Эй, Опал, Это именно то, что мне нужно. Большое спасибо :-) Только один последний вопрос (из-за ошибки в моем вопросе (на самом деле порядок ключа/ценности должен быть наоборот)): Как бы это выглядело, если ** время ** должно быть и ** stepNumber ** значение? На самом деле я хочу получить время, вызвав 'firstKey()' и 'lastKey() ...' – schlomm

+1

Насколько я понял, это будет 'timeWithIdentifier [time] = i'. Если это сработает, примите и подтвердите. – Opal

+0

'timeWithIdentifier [time [i]] = i' сделал трюк. Использование 'timeWithIdentifier [time] = i' приводит к ** java.util.ArrayList не может быть отнесено к java.lang.Comparable ** В любом случае ... большое спасибо! :) – schlomm

Смежные вопросы