我想要一个既是Map又是Collection的对象。更具体地说,我想要能够迭代Map中的条目,包括存在特定键的多个条目的情况。
我要解决的具体问题是提供一个可以在jstl中使用的对象,可以使用进行迭代,并且可以在表达式
从方法的角度来看,这应该很简单,只需要提供一个Map实现,其中
(如果你猜到我试图呈现xml,那么你是正确的)
编辑
请注意,这是用于jstl,因此我提供的任何接口都必须满足两个条件:
用于[]和.运算符,它必须是Map,List,数组或JavaBeans对象(其中它不能是List或数组,因为索引不是数字)
对于forEach,它必须是数组,Collection,Iterator,Enumeration,Map或String。
因此,我想问的真正问题是,我能否只依赖于jstl调用.containsKey(),.get()和.entrySet()而不关心违反不变量,并且不在内部复制不会保留特殊迭代行为的Map吗?
我要解决的具体问题是提供一个可以在jstl中使用的对象,可以使用进行迭代,并且可以在表达式
${a.b.c}
中使用。在这个例子中,我希望${a.b.c}
求值为 c 的第一个值(如果没有,则为空),但也能够使用<c:forEach items="${a.b.c}">迭代所有 c 并且循环体逐个查看每个 c 的值,尽管它们在Map中具有相同的键。从方法的角度来看,这应该很简单,只需要提供一个Map实现,其中
entrySet()
方法返回具有相同键的多个Entries的集合。但由于这似乎违反了Map的约定,会不会以微妙而灾难性的方式破坏事情呢?还有其他人做过这样的事情吗?(如果你猜到我试图呈现xml,那么你是正确的)
编辑
请注意,这是用于jstl,因此我提供的任何接口都必须满足两个条件:
用于[]和.运算符,它必须是Map,List,数组或JavaBeans对象(其中它不能是List或数组,因为索引不是数字)
对于forEach,它必须是数组,Collection,Iterator,Enumeration,Map或String。
因此,我想问的真正问题是,我能否只依赖于jstl调用.containsKey(),.get()和.entrySet()而不关心违反不变量,并且不在内部复制不会保留特殊迭代行为的Map吗?
get()
方法返回所有值的列表,我想让它返回某个单一明确定义的值(即第一个值)。它似乎也不是一个Map
,所以我不能在 jstl EL 中不加修改地使用它。 - evil otto