我正在查看实现Serializable
接口的API ArrayListMultiMap
。这是否意味着我可以序列化这个对象?是否所有Multimap对象都已序列化?
答案 0 :(得分:8)
Serializable
的含义始终相同:如果对象不可序列化,则无法序列化。如果是,它可能工作与否......特别是在集合(包括地图和多图)的情况下,它取决于它们的内容。
例如,您可以确定序列化ArrayList<String>
,因为ArrayList.class
是可序列化的,因此列表中的每个成员都是如此。尝试序列化ArrayList<Object>
的OTOH可能会或可能不会起作用:如果所有包含的对象都是例如字符串,它会工作。如果任何成员不可序列化,您将获得例外。
这是否意味着我可以序列化这个对象?
如果所有键和值都是可序列化的,则可以。
所有multiMap对象都可以序列化吗?
不,接口Multimap
不扩展Serializable
,因此可能存在非可序列化的实现。实际上,你可以通过例如Multimaps.filterEntries
。
答案 1 :(得分:0)
public CipherParameters getParameters() {
if (!isInitialized()) {
CryptoException.throwIt(CryptoException.UNINITIALIZED_KEY);
}
// modulus = p * q;
return new RSAPrivateCrtKeyParameters(p.getBigInteger().multiply(q.getBigInteger()), null,
null, p.getBigInteger(), q.getBigInteger(),
dp1.getBigInteger(), dq1.getBigInteger(), pq.getBigInteger());
}
和ArrayListMultimap
为HashMultimap
但Serializable
次观看(例如Collection
次)不是。
setModulus()
call已解答此问题:
要使用asMap()
返回的地图,您可以重新创建新地图并将Multimap asMap()
视图包装到其他集合中(例如Collection
),这将使新地图Set
:
Serializable
或符合java 7的代码:
Multimap<MyClass, MyOtherClass> myMultiMap = HashMultimap.create();
// ... build your multimap
Map<MyClass, Set<MyOtherClass>> map = myMultiMap.asMap().entrySet()
.stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
(entry) -> ImmutableSet.copyOf(entry.getValue())
));