我正在获得List<String>
形式的hibernate,其中包含completeFileAddress
。
CompleteFileAddress
我来自List
是:
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
然后我将CompleteFileAddress
分开以分别获取IPAddress
和FilePath
,并将值放在Map<String, List<String>>
中,其中键为IPAddress
,值为List of List FilePath
。
我的代码是:
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());
我的两个List
的大小都是4
,但我想要List1 = 3
和List2 = 1
的大小,因为我在服务器192.168.1.1
上有3个文件并且192.168.1.2
只有一个。
我怎样才能实现这一点?
答案 0 :(得分:1)
key
,value
对,并为两个密钥引用相同的列表。filePath
添加到该列表中filePath
添加到新创建的列表中,最后添加key
,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);
}
答案 1 :(得分:0)
您正在为地图中的所有条目使用相同的List对象。相反,如果地图中已有条目,则必须检查每个serverIP。如果有条目,请添加到现有列表。如果没有条目,请创建一个新列表并将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);
}
答案 2 :(得分:0)
几点变化
List<String> sourceFileList = filesMap.get(serverIP);
if( sourceFileList == null ) {
sourceFileList = new ArrayList() ;
}
sourceFileList.add(filePath);
filesMap.put(serverIP, sourceFileList);