如何在具有相同参数名称的Map中放置许多对象

时间:2013-08-01 16:03:25

标签: java

我有这个代码,但它似乎过度写了一个参数而我最终只得到一个myImages参数,无论我在imagesList

中有多少个值

有没有办法将许多对象放在具有相同名称的Map中?

for(String imagePath: imagesList){
        File imageFile = new File(imagePath);
        params.put("myImages", imageFile);
    }

修改 我必须使用地图,因为我用来制作多部分POST请求的库要求我将文件放在地图中

2 个答案:

答案 0 :(得分:3)

您需要将集合用作Map值。

Map存储唯一键 - &gt;值映射,因此再次放置相同的值只会覆盖它。您可以使用Map<String, Collection<File>>,如此:

final Map<String, Collection<File>> myMap = new HashMap<String, Collection<File>>();
//...
Collection<File> files = myMap.get("myImages");
if(files == null) {
    files = new LinkedList<File>();
    myMap.put("myImages", files);
}
for(String imagePath: imagesList){
    File imageFile = new File(imagePath);        
    files.add(imageFile);
}

或者您可以考虑使用Guava之类的Multimap实施。

答案 1 :(得分:1)

正如其他人提到的那样,使用Guava的Multimap,它允许您将多个值与单个键相关联,例如:

Multimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("myImages", file1);
multimap.put("myImages", file2);
multimap.put("myImages", file3);

Collection<File> images = multimap.get("myImages");