yamadamn’s blog

IT関連技術で経験したこと・気になったことをたまに書きます

一組のMapを作成する

たけぞうさん[Java]Mapを1行で書くを見て。

Collections.singletonMapを使えばいいんじゃないかと思った。
J2SE 1.3から導入されてるんだけど、マイナーなAPIなのかな??
個人的には、たまに使うのだけど。

という話です。ただ、1組のパラメータしかセットしない場合に

Map params = new HashMap();
params.put("customer", id);
setRedirect(DetailPage.class, params);

と3行も書かなきゃいけないのは面倒なので、以下のように1組のパラメータを直接渡せるメソッドもいるんじゃない?という話になりました。

setRedirect(Class clazz, String key, String value);

でも「マップのままでも以下のように1行で書けますよ」というレスが。

setRedirect(DetailPage.class, new HashMap(){{put("customer", id);}});

実際にこう書くかどうかは別として、その発想はなかったぜ!と思いました。

Mapを1行で書く - 新・たけぞう瀕死の日記

まあ、確かにできるけど、こうは書かないだろうってやつですね。
ちなみに、singletonMapは不変なので、可変にしたい場合は、

new HashMap(Collections.singletonMap(key, value))

のようにやったりします。うーん、冗長。。
Mapリテラル的なものを使ったほうがいいのかな。


姉妹品に、Collections.singletonListもあります。
こちらは多くの場合、Arrays.asListで代替できるから更に使わなそうですね。
Setを返すCollections.singletonは・・・そういえば、使ったことないかも。