Какова лучшая структура данных для хранения таблиц, имеющих K-V столбцы - PullRequest
0 голосов
/ 11 июля 2019

Я использую Apache POI для извлечения таблиц из текстового документа.Эти таблицы имеют первый столбец ключа, второй значения, и это может быть любое количество таких парных столбцов.В настоящее время я перебираю каждую таблицу, каждую строку, каждую ячейку для последовательного хранения всех ячеек в List<String>

Конечная цель - сохранить результаты в CSV с 2 столбцами Attribute name и Attribute valueи K-V столбцы должны быть перебраны сверху вниз, а затем перейти к следующим 2 столбцам, если они существуют.

Я перебираю List<String> (i, являющийся счетчиком индекса) и использую псевдокод ниже длясделать это:

  • Используя логические значения keyB и valueB и инициализировать keyB в true и valueB в false.
  • If(keyB), затем сохранитьтекущая строка как Attribute name и do i++.Пометьте keyB до false и valueB до true.
  • if(valueB), затем сохраните текущую строку как Attribute value и выполните i=i+<NO_OF_COLUMNS> -1, чтобы добраться до позиции ключа, присутствующего в следующей строке, иотметка от keyB до true.
  • Я также храню topKeyInd, который инициализируется для индекса ключа первой строки (0-й элемент List)
  • , когда мы находимся в последней строкеЯчейка значения, тогда я использовал условие
    if(i+<NO_OF_COLUMNS> -1)> List.size()), тогда мы должны начать со следующей пары столбцов KV, если существует.Итак, i = topKeyInd +2, чтобы перейти к первой ключевой ячейке 3-го столбца и соответственно обновить topKeyInd.
  • Продолжать процесс, описанный выше, до тех пор, пока мы не достигнем последнего элемента List.

Itкажется очень сложным, есть ли лучший способ справиться с этим?

1 Ответ

0 голосов
/ 11 июля 2019

Я использую ConcurrentHashMap (например: ConcurrentHashMap), потому что это быстро и потокобезопасно:)

для вашего примера:

public static ConcurrentHashMap<String, String> hashMap = new concurrentHashMap<>();

for( int i = 0 ; i< list.size(); i+=2){
    hashMap.put(list.get(i), list.get(i+1));
}

Здесь у вас есть пример простой карты.

...