地图也可以是收藏品吗?

evi*_*tto 3 java collections jstl

我想要一个也是收藏品的地图.或者更具体地说,我希望能够迭代Map中的条目,包括特定键有多个条目的情况.

我试图解决的具体问题是提供一个可以在jstl中使用的对象,它可以迭代使用c:forEach和表达式${a.b.c}.在这个例子中,我想要${a.b.c}计算第一个值c(或者如果没有则为null),但是也能够迭代所有cs <c:forEach items="${a.b.c}">并让循环体c依次看到每个单独的值,尽管它们在地图中使用相同的密钥.

从方法的角度来看,这应该是直截了当的,只需提供一个Map实现,其entrySet()方法返回一个具有相同键的多个Entries的集合.但由于这似乎违反了地图的合同,事情会以微妙但灾难性的方式破裂吗?有没有其他人做过这种事情?

(如果你猜我试图呈现xml,那你就是对的)

编辑

请注意,这是用于jstl,因此我提供的任何界面必须满足2个条件:

  • [].运算符一起使用时,它必须是一个Map,List数组或JavaBeans对象(并且它们不能是List或数组,因为索引不是数字)
  • 对于用foreach使用它必须是一个阵列,Collection,Iterator,Enumeration,Map,或String.

所以我想真正的问题是,我可以指望JSTL 只能打电话.containsKey(),.get().entrySet()不关心被侵犯的不变量,而不是在内部做这将不保留特殊迭代行为的地图的副本.

Ara*_*ram 5

您正在寻找的是Multimap.Guava提供了它的实现,特别是你正在寻找ArrayListMultimap.