![](/img/trans.png)
[英]How Can we show One Key and its Values from Map<String, List<Object>> at a time on a JSP page?
[英]How can I get the values from Map<String List<Object>>
我有一個看起來像這樣的模型類EmployeeBaseData.java
(這僅是示例):
public class EmployeeBaseData {
public EmployeeBaseData(String sid){
this.sid = sid;
}
private String sid;
private int actualHours = 10;
private int regularHours = 9;
private int overtime = 1;
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public int getActualHours() {
return actualHours;
}
public void setActualHours(int actualHours) {
this.actualHours = actualHours;
}
public int getRegularHours() {
return regularHours;
}
public void setRegularHours(int regularHours) {
this.regularHours = regularHours;
}
public int getOvertime() {
return overtime;
}
public void setOvertime(int overtime) {
this.overtime = overtime;
}
這是控制器:
public class InputController {
public static void main(String[] args) {
try {
Map<String, List<Object>> employeeMap = new HashMap<String, List<Object>>();
EmployeeBaseData base_data1 = new EmployeeBaseData("e774801");
EmployeeBaseData base_data2 = new EmployeeBaseData("e774802");
List<Object> valSetOne = new ArrayList<Object>();
List<Object> valSetTwo = new ArrayList<Object>();
valSetOne.add(base_data1);
valSetTwo.add(base_data2);
employeeMap.put("e774801", valSetOne);
employeeMap.put("e774802", valSetTwo);
for(Map.Entry<String, List<Object>> entry : employeeMap.entrySet()){
String key = entry.getKey();
List<Object> value= entry.getValue();
}
現在的問題是,如果我需要訪問模型的getOverTime()
方法,那么如何從地圖中獲取它?
關於地圖的正確定義,@ epoch有正確的想法。 值得指出的是,Java 8為您提供了一種非常優雅的方式來獲得所有的加班時間,而不必編寫麻煩的循環:
List<Integer> overtimes =
employeeMap.values()
.stream()
.flatMap(Collection::stream)
.map(EmployeeBaseData::getOvertime)
.collect(Collectors.toList());
您的問題是您將Object
作為ArrayList
的通用類型,應在List
指定數據類型,即:
Map<String, List<EmployeeBaseData >> employeeMap = new HashMap<String, List<EmployeeBaseData >>();
EmployeeBaseData base_data1 = new EmployeeBaseData("e774801");
EmployeeBaseData base_data2 = new EmployeeBaseData("e774802");
List<EmployeeBaseData > valSetOne = new ArrayList<>();
List<EmployeeBaseData > valSetTwo = new ArrayList<>();
valSetOne.add(base_data1);
valSetTwo.add(base_data2);
employeeMap.put("e774801", valSetOne);
employeeMap.put("e774802", valSetTwo);
for(Map.Entry<String, List<EmployeeBaseData>> entry : employeeMap.entrySet()){
String key = entry.getKey();
List<EmployeeBaseData> value = entry.getValue();
// access objects here:
for (EmployeeBaseData a : value) {
a.getOverTime();
}
}
我同意時代的回答。 (即使用List<EmployeeBaseData>
)
另外,如果您還想在列表中存儲其他類型的對象,則可以使用List<Object>
。 在這種情況下,您只需檢查類型並執行強制轉換 :
for(Map.Entry<String, List<Object>> entry : employeeMap.entrySet()){
String key = entry.getKey();
List<Object> valueList = entry.getValue();
for (Object item : valueList)
{
// CHECK THE TYPE
if (item instanceof EmployeeBaseData)
{
// PERFORM A CAST
EmployeeBaseData ebd = (EmployeeBaseData) item;
int overtime = ebd.getOverTime();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.