Разделить строку значений и поместить их в таблицу

#java

#java

Вопрос:

У меня есть таблица поиска, в которой есть пара ключей и значений следующим образом:

 Key|Value
abc|a,b,c
def|a,b,c
fes|a,d,c
 

то, что я пытаюсь сделать, это поместить их в список, как показано ниже, с каждым значением в отдельном столбце

 "abc",a,b,c
"def",a,b,c
"fes",a,d,c
 

Ниже приведен мой код:

 public class Schema {
    public static HashMap<String, ArrayList<String>> tableList = new HashMap<String, ArrayList<String>>();  
    static 
    {
        LookupTable SchemaLookup = ContextFactory.getCurrentContext().getLookupTableManager().getLookupTable("File Layout");
        Collection<LookupTableEntry> mappings = SchemaLookup.getLookupTableEntries();
        try {
            Iterator<LookupTableEntry> mappingsIterator = mappings.iterator();
            while (mappingsIterator.hasNext()) {
                LookupTableEntry entry = mappingsIterator.next();
                String key = entry.getKey();
                List<String> values = entry.getValues();
                ArrayList<String> arrayValues = new ArrayList<String>(values);
                tableList.put(key, arrayValues);
            }
        }finally {
        }
    }
}
 

прямо сейчас это возвращает все значения как одно, но я хочу иметь его в виде отдельных столбцов. есть идеи о том, как я могу разделить значения через запятую и добавить их отдельно? (например, размер таблицы для всех должен быть 4, сейчас его 2)

Спасибо!

Комментарии:

1. Разве вы не можете изменить tableList.put() метод?

2. как сделать разделение внутри 2-го параметра?

3. Почему бы просто не выполнить a String#split() перед добавлением значений?

4. Что вы подразумеваете под » прямо сейчас это возвращает все значения как одно «? List<String> values = entry.getValues(); похоже, он возвращает вам список значений. Можете ли вы уточнить, что у вас есть сейчас и чего вы хотите достичь?

5. он возвращает мне «a, b, c» вместо этого я хочу «a», «b», «c»

Ответ №1:

Вы должны разделить строку в первом элементе values списка:

 ArrayList<String> arrayValues = 
               new ArrayList<String>(Arrays.asList(values.get(0).split(",")));
tableList.put(key, arrayValues);
 

Элемент с индексом 0 в values списке — «a, b, c». Вы разбиваете ее, получаете массив like {"a","b","c"} и создаете из него список.

Ответ №2:

Я предполагаю, что вы не хотите или не можете обновлять код, который создает LookupTableEntry экземпляры. Итак, все, что вы можете сделать, это прочитать этот один элемент "a,b,c" , разделить его , и поместить разделенные элементы в другую коллекцию.

Сделайте так, чтобы вы могли использовать, например, что-то вроде

 List<String> values = entry.getValues();
ArrayList<String> arrayValues = new ArrayList<String>();

for(String token : values.get(0).split(",")){
    arrayValues.add(token);
}    

tableList.put(key, arrayValues);
 

Или однострочный

 tableList.put(key, new ArrayList(Arrays.asList(entry.getValues().get(0).split(",")))); 
 

Комментарии:

1. @Razvan Да, если они длинные (как этот), поэтому я добавил его в качестве дополнения к более читаемому коду.