mapにリストのキーが含まれているかどうかをチェックし、含まれていれば、最初にマッチした値を返す必要があります。思いつく素朴な方法は、2つのネストされたループでこれを行うことです。
Map<String, String> fields = new HashMap<String, String>();
fields.put("a", "value a");
fields.put("z", "value z");
String[] candidates = "a|b|c|d".split("|");
for (String key : fields.keySet()){
for (String candidate : candidates) {
if (key.equals(candidate)){
return fields.get(key);
}
}
}
おそらくJava標準ライブラリに依存した、より効率的な方法はありますか?
for(String candidate : candidates) {
if(fields.containsKey(candidate)) {
return fields.get(candidate)
}
}
は、map に null 値が含まれる可能性があり、最初に検出されたキーだけが必要な場合に最適な方法です。
きっと、こんな感じ。
for (String candidate : candidates) {
String result = fields.get(key);
if (result != null) {
return result;
}
}
上記は、候補キーごとに1つのマップ検索を実行するだけです。存在しないキーを抽出すると単にnullが得られるので、存在と抽出のための別々のテストを避けることができます。有効なキーに対するnull値は、この解決法では存在しないキーと区別がつかないことに注意してください(Slanecに感謝します)。
なぜ大文字と小文字の変換をするのかがよくわからないのですが...。
私の見解です。
Map<String, String> fields = new HashMap<String, String>();
fields.put("a", "value a");
fields.put("z", "value z");
String[] candidates = "a|b|c|d".split("|");
for (String candidate : candidates) {
if (fields.containsKey(candidate)) {
return fields.get(candidate);
}
}