我不明白为什么您需要Java Collections singletonMap?在多线程应用程序中有用吗?
Answers:
基本上,它允许您执行以下操作:
callAPIThatTakesAMap(Collections.singletonMap(key, value));
而不是这样:
Map<KeyType, ValueType> m = new HashMap<KeyType, ValueType>();
m.put(key, value);
callAPIThatTakesAMap(m);
当您只有一个键/值对时,这会更好。这种情况可能不会经常出现,但singleton()
并 singletonList()
可能频繁是有用的。
如果您需要将映射传递给某个通用代码(作为参数或方法的结果)并且知道在这种特殊情况下很有用,但是在其他情况下可能不需要将映射传递给同一通用,这将非常有用代码-您要传递的地图只有一个键。在这种情况下,SingletonMap比完整的地图实现更有效,并且对于程序员也更加方便,因为您需要说的所有内容都可以在构造函数中说明。
主要是为了方便和抽象。某些API将aCollection
作为参数,最好有一种简单的方法将对象转换为Set
or Map
。
singletonMap()
并且singletonList()
实际上是singletonSet()
在Java 1.3中引入的,因为singletonSet()
事实证明它很有用。
很多答案告诉您何时,但我想指出何时 not use it
如果您不想使用它put items later on
,
因为把singletonMap
将抛出的实现UnsupportedOperationException
这只是另一个示例,但是我写了以下代码:
@Override public Map<Action, Promise<Boolean>> actOnResults() throws Exception {
return Collections.singletonMap(Action.UPDATE_DATABASE, saver.save(results));
}
注意@Override
。该界面通常可以拍摄许多事物的地图。这个特定的实例总是返回包含一件事的映射。另请注意,映射的键是枚举。因此,从不应该将地图变大,而应该只包含指定了任何操作的结果。在我的实际示例中,最多有5个动作,此实例仅使用其中之一。
是完整的,EnumSet
或者EnumMap
通常在这些情况下是合适的,但是与上面的代码相比,它们仍然令人讨厌。
SingletonMap
所以我对其进行了编辑。从那以后,我就