2012-11-27 3 views
-1

안녕하세요. 코드에 문제가 있습니다.java HashMap에 키와 값으로 arraylist가 포함되어 있습니다.

abc-1 1.2.3.4 123 
abc-2 1.1.1.1 123 

하지만 내 문제는 목록 값으로 표시되어 있습니다 : :

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()); 
       } 
     } 
    }  
} 

아웃 풋

는 표시해야 4 대신이 그 넣어 잘못이기 때문이다.

이 문제를 해결하는 방법 :

+11

코드는 * 읽기 쉽게 * 많은 것이다. –

+0

얼마나 오래 버그를 찾으려고 했습니까? – AlexWien

+0

두 번째로 @JonSkeet을 보았습니다 - live :) –

답변

0

내가 답을 찾으려고하지 않았다; 더 쉽게 읽을 수 있도록 처음에는 단순화하는 것이 더 좋습니다. 자바 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()); 
      } 
     } 
+0

2 번 줄이 너무 많다고 생각합니다. –

+0

@ojota 나 자신도 그것을 보았습니다. 그래도 고마워. 제거되었습니다. –

관련 문제