1

我有这段代码,但它似乎覆盖了一个参数,myImages无论我有多少值,我最终只得到一个参数imagesList

有没有办法将许多对象放在同名的地图中?

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

编辑 我必须使用地图,因为我用来发出多部分 POST 请求的库要求我将文件放在地图中

4

2 回答 2

3

您需要使用集合作为Map值。

AMap存储一个唯一的键 -> 值映射,因此再次放置相同的值只会覆盖它。您可以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);
}

或者您可以考虑使用GuavaMultimap之类的实现。

于 2013-08-01T16:08:15.960 回答
1

正如其他人提到的使用 Guava's 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");
于 2013-08-01T16:08:24.337 回答