Я ищу способ получить первый элемент java.util.Set
в velocity templating engine. Может ли кто-нибудь предложить?Apache Velocity templating: получить первый элемент java.util.Set
ответ
Возможно, вы можете получить элемент (случайный *) с
$var.iterator().next()
Но Set
с не имеют никакого порядка между их элементами, так что нет первого элемента.
* Случайно, как будто это зависит от реализации набора. В некоторых случаях (например, когда это SortedSet
), данный Итератор возвращает элементы в некотором порядке. Смотрите SortedSet
«s documentation: итератор
панели ресивера будет проходить набор в порядке возрастания элементов.
Но в этом случае, ничего не гарантирует, что реализация множества не изменится когда-то, так что, если мы говорим об общем Set
, вы не должны зависеть от этого.
Если мы говорим о SortedSet
, вы должны использовать first()
метод, вместо:
$var.first()
Это работает, спасибо @Nagy Vilmos – ambes
** Некоторые ** Наборы Java имеют естественный порядок, который отражается в методе итератора(), поэтому это может быть полезно. Например, [java.utll.TreeSet] (https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html#iterator--) "Возвращает итератор по элементам в этом в порядке возрастания ". –
@PatriciaShanahan: да, но если это «TreeSet» (если это какой-либо подкласс «SortedSet»), то он имеет метод «first()». Но если статический тип данной переменной просто «Set», то любой может изменить тип набора dinamyc - и я бы ничего не писал на основе некоторой теории (текущая реализация - «TreeSet» и ...) - я сделал хочу выразить это, используя слово «случайный». –
"Первый"? 'Set' не имеет понятия порядка для своих элементов. – user2357112
мой плохой, он чувствует. строго говоря, говорить о «первом элементе набора» не имеет смысла. – ambes