MinecraftのCraftBukkit/Spigotプラグインで開発中、Value(値)からKey(キー)を取りたかったのですがjava.util.HashMapにはそんな便利なもの無いんですよね。
突貫工事で取る手法なので本業プログラマさんには叱られそうな内容です。
前提
- Oracle Java 8(商用でないのでOracle使ってます)
- java.util.HashMapを基本に実装
他のライブラリでは簡単に取れるものもあるらしいですが面倒だったので - 今回HashMapは両者の値をStringとして扱う(HashMap<String, String>)
実装コード
登録されているkeyをforeachで回して、keyからvalueと取り出す。
引数と照合して合致した時点でkeyを返却します。
今回は何も見つからなかった場合はnullを返します。
/** * valueからkeyを取得(逆引き) * * @param value 値 (String) * @return キー (String) */
public static String valueToKey(String value) { for (String key : map.keySet()) { if (map.get(key).equalsIgnoreCase(value)) { return key; } } return null;
}
最後に
今回、このデータはせいぜい100件(どれだけ多くても300件)程度の量を想定してこの実装になりました。
せっかくJava 8使っているのだからもっとエレガントに書けるでしょと言われたらヘコみます。
趣味の範囲なのでスルーしてください…。