Я хотел бы иметь Карту, которая также является Коллекцией.Или, более конкретно, я хотел бы иметь возможность перебирать записи на карте, включая случай, когда для определенного ключа есть несколько записей.
Конкретная проблема, которую я пытаюсь решить, заключается в предоставленииобъект, который можно использовать в jstl как для перебора, используя c:forEach
, так и в выражении типа ${a.b.c}
.В этом примере я бы хотел, чтобы ${a.b.c}
оценил первое значение c
(или ноль, если их нет), но также мог бы выполнять итерацию по всем c
с <c:forEach items="${a.b.c}">
и иметьтело цикла видит каждое отдельное значение c
по очереди, хотя они имеют одинаковый ключ на карте.
Если смотреть на вещи с точки зрения метода, это должно быть просто, просто предоставьте реализацию Map
, метод entrySet()
которой возвращает набор с несколькими записями с одним и тем же ключом.Но так как это, кажется, нарушает контракт Карты, все ли изменится тонким, но катастрофическим образом?Кто-нибудь еще делал подобные вещи?
(Если бы вы догадались, что я пытаюсь представить xml, вы были бы правы)
РЕДАКТИРОВАТЬ
Обратите внимание, что это для использования в jstl, поэтому любой интерфейс, который я представляю, должен удовлетворять 2 условиям:
- для использования с операторами
[]
и .
, это должно быть Map
, List
, массив или объект JavaBeans (и из тех, что он не может быть списком или массивом, поскольку индексы не будут числами) - для использования с forEach это должен быть массив,
Collection
, Iterator
, Enumeration
, Map
или String
.
Так что, я думаю, реальный вопрос в том, могу ли я рассчитывать только на jstl , звонящем .containsKey()
, .get()
и .entrySet()
и не заботятся о нарушении инвариантов, а также не создают внутреннюю копию карты, которая не сохранит особого поведения итерации.