なぜJavaコレクションsingletonMapが必要になるのかわかりませんか?マルチスレッドアプリケーションで役立ちますか?
回答:
基本的に、これを行うことができます:
callAPIThatTakesAMap(Collections.singletonMap(key, value));
これではなく:
Map<KeyType, ValueType> m = new HashMap<KeyType, ValueType>();
m.put(key, value);
callAPIThatTakesAMap(m);
これは、キーと値のペアが1つしかない場合に非常に便利です。このような状況は、おそらく非常に頻繁に発生しませんが、singleton()
と singletonList()
かなり頻繁に役立ちます。
マップをいくつかの一般的なコードに(パラメーターとして、またはメソッドの結果として)渡す必要があり、この特定のケースでは、マップを同じ一般的なコードに渡す他のケースではおそらくそうではないことがわかっている場合に便利です。コード-渡すマップにはキーが1つだけあります。その場合、SingletonMapは、本格的なマップ実装よりも効率的であり、コンストラクターで言う必要があるすべてのことを言うことができるため、プログラマーにとっても便利です。
これは主に利便性と抽象化のためです。一部のAPICollection
は引数としてを取り、オブジェクトをSet
またはに変換する簡単な方法があると便利です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
。より一般的には、インターフェースは多くのもののマップをとることができます。この特定のインスタンス化は、常に1つのものを含むマップを返します。また、マップのキーは列挙型であることに注意してください。したがって、マップが大きくなることは想定されておらず、指定されたアクションの結果が含まれているだけです。私の実際の例では、最大5つのアクションがあり、このインスタンス化ではそのうちの1つのみを使用します。
完全であるEnumSet
かEnumMap
、これらの場合に適切であることがよくありますが、上記のコードと比較すると、依然として厄介な冗長性があります。
SingletonMap
ので、編集しました。それ以来、変更をロールバックしました;)