Цикл ввода-вывода скорости Java

#java #foreach #velocity

#java #foreach #скорость

Вопрос:

У меня есть ArrayList, который я заполняю в java и передаю его в шаблон velocity для использования. Теперь, когда я пытаюсь выполнить итерацию списка и создать из списка строку, разделенную запятой, я наблюдаю неустойчивое поведение.

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

 > #set($list_str="")
> #foreach($item in $list)
>     #set($list_str=$!list_str $!item ",")
> #end
  

Теперь я вижу, что моя переменная $list_str содержит все элементы списка, но в конце также добавляется имя переменной итератора ‘$!item’.

So, say my list has [0,1,2,3,4], my end result(value of $list_str) is [0,1,2,3,4],$!item,

Я не уверен, связано ли это с тем, что нулевая ссылка из заполняемого списка передается в шаблон velocity.

Любые указания на исправление этого были бы высоко оценены.

Спасибо

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

1. Вы уверены, что это не вызвано чем-то другим где-то? Можете ли вы вывести все промежуточные результаты для каждой итерации цикла? Кроме того, откуда взяты скобки в выходных данных?

Ответ №1:

Я быстро проверил, и, похоже, это из-за нулевого значения в вашем ArrayList.

Для списка массивов, заполненного следующим образом —

 ArrayList list=new ArrayList();
        list.add("try");
        list.add("to");
        list.add("figure");
        list.add("it");
  

и с кодом velocity, как показано ниже —

 #foreach($iter in $list)
    $!iter
    #set($list_str=$!list_str $!iter ",")
#end
$!list_str
  

Я получаю следующий вывод —

 try
    to
    figure
    it
try,to,figure,it,
  

который, кажется, соответствует ожиданиям.

Теперь, когда я заполняю свой Arraylist следующим образом —

 ArrayList list=new ArrayList();
        list.add("try");
        list.add("to");
        list.add("figure");
        list.add("it");
        list.add(null);
  

и с тем же кодом скорости, что и выше, я получаю следующий вывод —

 try
    to
    figure
    it

try,to,figure,it,$!iter,
  

Итак, я предполагаю, что вам нужно добавить нулевую проверку где-нибудь в вашем коде, чтобы избежать этого.

Спасибо p1nG

PS: Как указал @Thilo, я не уверен, откуда взяты скобки, не уверен, является ли это желаемым поведением.

Ответ №2:

Используйте инструменты velocity для этого, например

 #set($display = $utils.getClass().forName("org.apache.velocity.tools.generic.DisplayTool").newInstance())
#set($myArray=["nando","bob","don"])
$display.list($myArr,",")
  

Вот и все, результатом будет nando, bob, don
если вы не включите второй параметр в метод list, вы получите
нандо, Боб и Дон