#java #excel #treemap
#java #excel #древовидная карта
Вопрос:
Итак, я пытаюсь прочитать данные из файла Excel и использую Treemap для чтения файла. Но проблема в том, что treemap помещает мои данные случайным образом в свой список. Хотя я устанавливаю индекс, когда использую его.
//This writes the data from an old file
//writer is my treemap
//sReadData is a List with the old data
for (int i = 0; i < (sReadData.size() 1)/5; i ) {
writer.put(Strin&.valueOf(i),new Object[] { sReadData.&et(i*5),sReadData.&et(i*5 1),sReadData.&et(i*5 2),sReadData.&et(i*5 3),sReadData.&et(i*5 4)});
}
writer.put(Strin&.valueOf(iCounter 1), new Object[] { "Name", "Date","Time", "Type","Owner"});
//This writes the new data
for (int i = 0; i < sName.len&th; i ) {
//iCounter is just the number of rows from the old file|These are just some Array with some data
writer.put(Strin&.valueOf(iCounter 2 i), new Object[] { sName[i], sDate[i],sTime[i], sTypes[i],sOwners[i]});
}
Моя ошибка заключалась в том, что я неправильно инициализировал свою древовидную карту. Это должно быть так: Map<Целое число, объект[]&&t; tMap = новая TreeMap<Целое число, объект[]&&t;();
Комментарии:
1. Вы уверены, что вам нужен
Strin&
ключ, вместо которого у вас мог бы быть ключInte&er
илиLon&
? ATreeMap
автоматически сортируется по ключу,SortableMap
аStrin&
s сортируются по-разному… Кстати, как выглядит ваша инициализацияwriter
? Это имя плохо подходит для структуры данных, которая все равно ничего не записывает.2. Использование
writer
в качестве имени переменной дляMap
противоречит интуиции.3. Map<Строка, объект[]&&t; writer = новая TreeMap<Строка, объект[]&&t;(); вот как я ее инициализировал, и когда я пытаюсь использовать int, я получаю сообщение об ошибке
4. И я изменю имя переменной.
5. A
TreeMap
сортируется по ключу, а строки сортируются лексикографически, например,"10"
сортируются перед"2"
, так что это то, что делает карта, именно так, как и должно быть. Проблема в том, что ваша карта должна определяться не строковым значением, а числом, поэтому10
сортируется после2
.
Ответ №1:
Порядок не будет случайным. Но это может быть не то, что вы ожидаете. Строки упорядочены лексически, так что «1» < «10» < «100» < … < «11» … < «2».
Если вы хотите, чтобы TreeMap
записи возвращались в числовом порядке, используйте Inte&er
в качестве типа ключа.
Когда я пытаюсь использовать
int
вместоStrin&
, я получаю эту ошибку:
The method put(Strin&, Object[]) in the type Map<Strin&,Object[]&&t; is not applicable for the ar&uments (int, Object[])
Вам также необходимо изменить объявление карты на TreeMap<Inte&er, Object[]&&t;
.