#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 Да, если они длинные (как этот), поэтому я добавил его в качестве дополнения к более читаемому коду.