當您使用<c:forEach>
遍歷映射時,迭代中的每個項目都是Map.Entry
的實例。每個項目有key
和value
。對於項目Map<Integer, Map<String, SomeObject>>
,key
是Integer
的實例,並且value
是Map<String, SomeObject>
的實例。
假設您有以下地圖和嵌套地圖:
Map<Integer, Map<String, SomeObject>> outerMap =
new HashMap<Integer, Map<String, SomeObject>>();
Map<String, SomeObject> firstNestedMap = new HashMap<String, SomeObject>();
Map<String, SomeObject> secondNestedMap = new HashMap<String, SomeObject>();
和一些對象:
public class SomeObject {
public Integer getVariableInSomeObject() {
return variableInSomeObject;
}
public void setVariableInSomeObject(Integer variableInSomeObject) {
this.variableInSomeObject = variableInSomeObject;
}
private Integer variableInSomeObject;
}
您可以填寫地圖的,例如,如下圖所示:
SomeObject firstSomeObject = new SomeObject();
firstSomeObject.setVariableInSomeObject(1);
SomeObject secondSomeObject = new SomeObject();
secondSomeObject.setVariableInSomeObject(2);
SomeObject thirdSomeObject = new SomeObject();
thirdSomeObject.setVariableInSomeObject(3);
SomeObject fourthSomeObject = new SomeObject();
fourthSomeObject.setVariableInSomeObject(4);
firstNestedMap.put("A", firstSomeObject);
firstNestedMap.put("B", secondSomeObject);
secondNestedMap.put("A", thirdSomeObject);
secondNestedMap.put("B", fourthSomeObject);
outerMap.put(1, firstNestedMap);
outerMap.put(2, secondNestedMap);
要迭代嵌套地圖並獲取值,請使用以下JSTL代碼:
<table>
<c:forEach var="item1" items="${map}">
<c:forEach var="item2" items="${item1.value}">
<tr>
<td><c:out value="${item2.value.variableInSomeObject}" /></td>
</tr>
</c:forEach>
</c:forEach>
</table>
因此,每次迭代時item1.value
將返回嵌套地圖的實例,即Map<String, SomeObject>
。 item2
將返回SomeObject
的實例。表達式${item2.value.variableInSomeObject}
將返回Integer
字段的實例。
其結果是,您將獲得:
你是什麼ITEM2 [ 'A']的意思。你想在內部地圖中的特定關鍵字'A'獲得對象。 –
是的,在遍歷嵌套地圖時,我想按特定鍵打印值。 – Brooke
您確定該特定對象的'variableInSomeObject'中有值嗎? –