Java 转换番石榴';s ArrayListMultimap到可序列化映射
是否可以在Java 转换番石榴';s ArrayListMultimap到可序列化映射,java,serialization,guava,Java,Serialization,Guava,是否可以在可序列化的映射中转换ArrayListMultimap?当然,键和值是可序列化的 我知道ArrayListMultimap是可序列化的,但我想将其序列化为普通的Map,因为我不想让反序列化程序知道guava multimap 我试过这个: ArrayListMultimap<String, Integer> mmap = ArrayListMultimap.create(); mmap.put("key",1); mmap.put("key",222
可序列化的映射中转换ArrayListMultimap
?当然,键和值是可序列化的
我知道ArrayListMultimap
是可序列化的,但我想将其序列化为普通的Map
,因为我不想让反序列化程序知道guava multimap
我试过这个:
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 mmap=ArrayListMultimap.create();
mmap.put(“键”,1);
mmap.put(“键”,22222);
ObjectOutput out=new ObjectOutputStream(new ByteArrayOutputStream());
//这个很好用
out.writeObject(mmap);
Map Map=Multimaps.asMap(mmap);
试一试{
out.writeObject(映射);
}捕获(NotSerializableException){
//Multimaps.asMap不可序列化,对我来说似乎合理
}
ImmutableMap imap=ImmutableMap.copyOf(map);
//将抛出java.io.NotSerializableException:com.google.common.collect.AbstractMapBasedMultimap$RandomAccessWrappedList。哦,天哪!!为什么?
out.writeObject(imap);
那么,有没有一种方法(希望是一种有效的方法)来转换可序列化映射中的ArrayListMultimap
,这就是:其中包含可序列化列表的映射
我使用的是guava-18.0您可以使用以下方法将地图值转换为可序列化的列表:
imap = ImmutableMap.copyOf(Maps.transformValues(map, ImmutableList::copyOf));