[英]java HashMap contains Set as key and arraylist as value
嗨,我的代碼有問題。
String[] vArr = new String[4];
vArr[0] = "329~abc-2~PACKET_DATA_GATEWAY_IP_ADDRESS~1.2.3.4";
vArr[1] = "328~abc-1~PACKET_DATA_GATEWAY_IP_ADDRESS~1.1.1.1";
vArr[2] = "329~abc-2~PACKET_DATA_GATEWAY_PORT_NUMBER~123";
vArr[3] = "328~abc-1~PACKET_DATA_GATEWAY_PORT_NUMBER~123";
if(vArr != null && vArr.length > 0) {
System.out.println("vArr.length ::" + vArr.length);
ArrayList<VehicleTO> aprogList = new ArrayList<VehicleTO>();
for(int i = 0;i < vArr.length; i++) {
System.out.println("Inside for loop ::" + vArr.length);
String[] iData = vArr[i].split("~");
System.out.println("value retrieved :" + Arrays.toString(iData));
HashMap<Set, ArrayList<VehicleTO>> programValues =
new HashMap<Set, ArrayList<VehicleTO>>();
String programName = null;
programName = iData[1];
HashSet<String> listnerOutputArgList = new HashSet<String>();
listnerOutputArgList.add(programName);
Collections.unmodifiableSet(listnerOutputArgList);
String progId = null;
String paramName = null;
String paramvalue = null;
progId = iData[0];
paramName = iData[2];
paramvalue = iData[3];
VehicleTO vehTO = new VehicleTO();
vehTO.setProgramName(programName);
if(paramName.equals("PACKET_DATA_GATEWAY_IP_ADDRESS")) {
vehTO.setIpAddress(paramvalue);
}
System.out.println("Setting Values ip ::" + vehTO.getIpAddress());
if(paramName.equals("PACKET_DATA_GATEWAY_PORT_NUMBER")) {
vehTO.setPortNumber(paramvalue);
}
System.out.println("Setting Values port ::" + vehTO.getPortNumber());
if(listnerOutputArgList.contains(vehTO.getProgramName())) {
aprogList.add(vehTO);
}
int progDet = aprogList.size();
System.out.println("The list value:"+ progDet);
programValues.put(listnerOutputArgList,aprogList);
for (Iterator<Set> it = programValues.keySet().iterator(); it.hasNext()) {
Set key = it.next();
if(programValues.containsKey(key)) {
programValues.get(key).add(vehTO);
ArrayList<VehicleTO> value = programValues.get(key);
for (int nCount = 0; nCount < value.size(); nCount++) {
System.out.println((String)value.get(nCount).getIpAddress());
System.out.println((String)value.get(nCount).getPortNumber());
}
}
}
}
輸出需要顯示為:
abc-1 1.2.3.4 123
abc-2 1.1.1.1 123
但我的問題是列表值顯示為: 4 而不是 2 因為輸出錯誤。
如何解決這個問題:
我沒有試圖找到答案; 最好先簡化,這樣可讀性更好。 我看到您對 java 7 仍然不太有信心,因此重寫了一些代碼:
使用Set<String>
。
for (Set<String> key : programValues.keySet()) {
ArrayList<VehicleTO> value = programValues.get(key);
value.add(vehTO);
for (VehicleTO vTO : value) {
System.out.println((String)vTO.getIpAddress());
System.out.println((String)vTO.getPortNumber());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.