Я имел дело с одним алгоритмом для создания автоматической структуры XML-файла в Java.
Идея состоит в том, чтобы подсчитать элементы в XML-файле, поместить их в список, а затем подсчитать повторяющиеся элементывнутри, наконец, создайте еще один XML-узел с количеством повторяющихся чисел внутри этого списка.
Я решил первую проблему, используя Map <String, Long>
и Collections
, чтобы получить повторяющиеся элементы и количество вхождений.
Я поместил их в Arraylist, преобразовав число вхождений в значения int.
Collection test = counterMap.values();
List <Integer> list = new ArrayList(test);
Iterator listIteration = list.iterator();
ArrayList <Integer> intValues = new ArrayList <>();
while (listIteration.hasNext()) {
int Values = Integer.parseInt(listIteration.next().toString());
intValues.add(Values);
}
Теперь у меня есть список значений int, например intValues=[1,3,3,4,2,2]
.
Используя этот список, я хочу создать элементы XML с номерами внутри этого списка.Я попытался для каждого и для петель преодолеть это.Но я не смог.
Element example;
for (int i = 0; i <= list.size(); i++) {
root = doc.createElement("root");
pattern.appendChild(root);
//for (Iterator<Integer> h = intValues.iterator(); h.hasNext();) {
//Integer item = h.next();
for (Integer a : intValues) {
for (int b = 1; b < a; b++) {
example = doc.createElement("example");
root.appendChild(example);
}
}
}
Пример вывода может быть таким:
<root>
<example>
<root>
<root>
<example>
<example>
<example>
<root>
<root>
<example>
<example>
<example>
<root>
<root>
<example>
<example>
<example>
<example>
<root>
(количество элементов, как оно есть в int arrayList)
Любая идеябыло бы неплохо двигаться дальше и извините за ошибки или неясные детали.
########## ОБНОВЛЕНИЕ РЕШЕНИЯ ############
Я нашел решение, я добавляю его сюда, чтобы любой мог получить его, если они в конечном итоге столкнутся с той же проблемой.Спасибо за помощь.
for (Integer a : intValues) {
root= doc.createElement("root");
for (int b = 1; b <= a; b++) {
pattern.appendChild(root);
example= doc.createElement("example");
rule.appendChild(example);
}
}
эта часть for (int i = 0; i <= list.size(); i++)
не нужна.Просто удалите его и измените порядок следования в циклах.Вывод - именно то, что я хочу.