#起こった問題
Listの中に入っているMapを繰り返し処理で取り出して条件分岐させたのですが、うまくいきませんでした。
##問題のコード
List<Map<String, String>> list = new ArrayList<Map<String,String>>();
Map<String, String> map = new HashMap<String, String>();
map.put("name", "hello");
map.put("name2", "hello2");
list.add(map);
for(Map<String, String> map2 : list) {
if(map2.get("name") == "hello") {
System.out.println("hi");
}
}
// =>表示されない
##原因
Javaの文字列比較で==演算子は使うことがNGだったようです。
簡単に紹介すると
比較している内容が
メモリ上のアドレスを比較するのか(==演算子)
メモリ上のアドレスに置いてあるデータを比較するのかの違いだそうです。(equalsメソッド)
下記の記事を参考にしました。
[Java]文字列比較で==はダメ、equalsが正解!・・・なんだけど、その理由をちゃんと知ろう!
##解決策
上でも軽く触れていますが、==からequalsメソッドに変えることで解決します。
List<Map<String, String>> list = new ArrayList<Map<String,String>>();
Map<String, String> map = new HashMap<String, String>();
map.put("name", "hello");
map.put("name2", "hello2");
list.add(map);
for(Map<String, String> map2 : list) {
if(map2.get("name").equals("hello")) {
System.out.println("hi");
}
}
// =>hi
// しっかり表示されました。
##おわりに
springを用いてDBから値を取り出して加工するプログラムを書いている際に起こった問題でした。
DBから値を取り出していたので、文字コードが変わっているんじゃないかと考えたのですが、全くダメで、結局解決策はすごく単純でした。
自分はまだスキルが乏しく、あまり気づけないことも多いので、もっと勉強していきたいと思います。