将List作为值插入Map中

时间:2014-02-05 11:07:46

标签: java hibernate map arraylist

我正在获得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分开以分别获取IPAddressFilePath,并将值放在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 = 3List2 = 1的大小,因为我在服务器192.168.1.1上有3个文件并且192.168.1.2只有一个。

我怎样才能实现这一点?

3 个答案:

答案 0 :(得分:1)

  • 您在地图中放置了相同的keyvalue对,并为两个密钥引用相同的列表。
  • 您可以检查地图是否包含密钥(如果存在)只检索值(即列表)并将filePath添加到该列表中
  • 如果密钥不存在,则创建新列表并将filePath添加到新创建的列表中,最后添加keyvalue以映射

试试此代码

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