Хорошей практикой здесь было бы, скорее, убедиться, что в коллекции Java, которую вы перебираете, нет дубликатов, или удалить дубликаты, поместив эти имена в Set на стороне Java.
Но если это решение недоступно в вашей среде, вы можете попробовать:
#set ($seenUsers = {})
#foreach ($user in $myUsersCollection)
#set ($fullName = "$user.firstName $user.lastName")
#if (!$seenUsers.containsKey($fullName))
#set ($junk = $seenUsers.put($fullName, 1))
#if ($dispNames.length() > 0)
#set ($dispNames = "$dispNames,")
#end
#set ($dispNames = "$dispNames, $fullName")
#end
#end
Это решение использует карту, чтобы запомнить, был ли уже виден конкретный пользователь. Кроме того, он избегает добавления комы после фамилии.
Вы также заметите, что правильным способом объединения строк в Velocity является форматирование больших строк с существующими ссылками, а не использование оператора +, который предназначен для числовых сложений.