2014-02-05 3 views
0

completeFileAddress을 포함하는 최대 절전 모드 List<String>이 표시됩니다. 내가 List에서 얻고지도에 값으로 목록 삽입

CompleteFileAddress은 다음과 같습니다

192.168.1.1/var/local/files/20140116/8800399421_4007_20140116_151718 
192.168.1.2/var/local/files/monitor/20140115/9654180710_4006_20140115 
192.168.1.1/var/local/files/20140116/8800399421_4007_20140116_120042 
192.168.1.1/var/local/files/20140116/138_4007_20140116_122719 

는 내가 별도로 IPAddressFilePath를 얻을 수 CompleteFileAddress을 분할하고, 키가 IPAddress이고 값이 FilePath의 목록입니다 어디 Map<String, List<String>>의 값을 넣어. 모두 List

List list = criteria.list(); 
      for (Iterator it = list.iterator(); it.hasNext();) { 
       String completeFileAddress = (String) (it.next()); 
       System.out.println("Complete add : " + completeFileAddress); 
       if (completeFileAddress != null) { 
        int index = completeFileAddress.indexOf("/"); 
        String serverIP = completeFileAddress.substring(0, index); 
        String filePath = completeFileAddress.substring(index, completeFileAddress.length()) + ".WAV"; 
        filesMap.put(serverIP, sourceFileList); //sourceFileList is declared as an instance variable 
        sourceFileList.add(filePath); 
       } 
      } 
     System.out.println("List '1' size :" + filesMap.get("192.168.1.1").size()); 
     System.out.println("List '2' size :" + filesMap.get("192.168.1.2").size()); 

내가 갖는 크기는 4하지만 내가 3 개 서버 192.168.1.1 파일 및 192.168.1.2에 하나를 가지고 나는 List1 = 3List2 = 1의 크기를 원하는 :

내 코드입니다.

어떻게하면 되나요? ???

답변

1
  • 당신은지도에 같은 key, value 쌍을 넣고 두 키에 대한 동일한 목록을 참조한다.
  • 키를 누른 다음 존재하는 새 목록을 작성하고 filePath 새로 마침내 key를 추가, 목록을 생성에 추가하지 않을 경우 그냥 값 (즉, 목록)을 검색하고 그 목록
  • filePath를 추가 존재하는 경우지도가 키가 포함 된 경우 확인할 수 있습니다, value

이 코드

String serverIP = completeFileAddress.substring(0, index); 
String filePath = completeFileAddress.substring(index, completeFileAddress.length()) + ".WAV"; 
if(filesMap.containsKey(serverIP)) 
{ 
    ArrayList<String> sourceList = filesMap.get(serverIP); 
    sourceList.add(filePath); 
} 
else 
{ 
    ArrayList<String> sourceList = new ArrayList<String>(); 
    sourceList.add(filePath); 
    filesMap.put(serverIP, sourceFileList); 
} 
0

지도의 모든 항목에 대해 동일한 List 객체를 사용하고 있습니다. 대신 맵에 항목이있는 경우 각 serverIP를 확인해야합니다. 항목이 있으면 기존 목록에 추가하십시오. 항목이 없으면 새 List를 만들고 그 목록에 filePath를 추가하십시오.

if (filesMap.get(serverIP) != null) { 
    List<String> list = new ArrayList<String>(); 
    list.add(filePath); 
    filesMap.put(serverIP, list); 
} else { 
    filesMap.get(serverIP).add(filePath); 
} 
0

몇 가지 변경을 시도지도로

List<String> sourceFileList = filesMap.get(serverIP); 
if(sourceFileList == null) { 
    sourceFileList = new ArrayList() ; 
} 
sourceFileList.add(filePath); 
filesMap.put(serverIP, sourceFileList);