转换ArrayListMultimap
Serializable
中的Map
是否可行?当然键和值是Serializable。
我知道ArrayListMultimap
是可序列化的,但我想将其序列化为普通Map
,因为我不希望解串器必须知道guava Multimaps。
我试过这个:
ArrayListMultimap<String, Integer> mmap = ArrayListMultimap.create();
mmap.put("key",1);
mmap.put("key",222222222);
ObjectOutput out = new ObjectOutputStream(new ByteArrayOutputStream());
//This works fine
out.writeObject(mmap);
Map<String, List<Integer>> map = Multimaps.asMap(mmap);
try {
out.writeObject(map);
} catch (NotSerializableException e){
//Multimaps.asMap is not Serializable, seems reasonable to me
}
ImmutableMap<String, List<Integer>> imap = ImmutableMap.copyOf(map);
//Will throw java.io.NotSerializableException: com.google.common.collect.AbstractMapBasedMultimap$RandomAccessWrappedList. Oh man!! why!??
out.writeObject(imap);
然后,有没有办法(一种有效的方式)转换序列化地图中的ArrayListMultimap
,这是:一个带有可序列化列表的地图?
我正在使用guava-18.0
答案 0 :(得分:1)
您可以使用http://psoug.org/reference/synonyms.html将地图值转换为Serializable
列表:
imap = ImmutableMap.copyOf(Maps.transformValues(map, ImmutableList::copyOf));