Mapのキーをイテレートしながら要素を削除する。

実装方法をすぐ忘れるので、メモ書き。

Map<String, String> m = new HashMap<String, String>();
m.put("aaa", "bbb");
m.put("aaa1", "bbb");
m.put("aaa2", "bbb");
m.put("aaa3", "bbb");
for (Iterator<String> i = m.keySet().iterator(); i.hasNext();) {
  if (i.next().endsWith("2")) {
    i.remove();
  }
}
System.out.println(m);


こういうショボイコードを見ると本当に泣ける。

  • ダメダメな例
Map<String, String> m = new HashMap<String, String>();
m.put("aaa", "bbb");
m.put("aaa1", "bbb");
m.put("aaa2", "bbb");
m.put("aaa3", "bbb");
List<String> list = new ArrayList<String>();
for (String s : m.keySet()) {
  if (s.endsWith("2")) {
    list.add(s);
  }
}
for (String s : list) {
  m.remove(s);
}
System.out.println(m);