package exercise0;

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;

import jp.avaj.lib.debug.L;

/**
 * Map<String,String>から特定の値の組を削除する
   ・以下のMapから"333"の値の組を削除する
     "aaa" => "111"
     "bbb" => "222"
     "ccc" => "333"
     "ddd" => "444"
     "eee" => "555"

    注意事項
      Mapの要素の削除をループの中でやってはいけない
      以下を参照
 */
class E0460 {
  public static void main(String[] args) {
    Map<String,String> map = createMap();
    deleteFromMap(map,"333");
    //
    Set<String> keys = map.keySet();
    for (String key : keys) {
      L.p(key+":"+map.get(key));
    }
  }
  private static void deleteFromMap(Map<String,String> map,String value) {
    Set<String> delKeys = new TreeSet<String>();
    Set<String> keys = map.keySet();
    for (String key : keys) {
      if (map.get(key).equals(value)) {
        // 注意、ここで削除処理をしてはいけない ⇒ 試しにやってみること
        delKeys.add(key);
      }
    }
    for (String delKey : delKeys) {
      map.remove(delKey);
    }
  }
  private static Map<String,String> createMap() {
    Map<String,String> map = new TreeMap<String,String>();
    map.put("aaa","111");
    map.put("bbb","222");
    map.put("ccc","333");
    map.put("ddd","444");
    map.put("eee","555");
    return map;
  }
}
//---------------------------------------------------
//・目次 - 未経験者向け Java演習問題(制御構造とStringとjava.util)
//・目次 - Java入門
//・目次 - ビジネスパーソンの常識と非常識
//・目次 - 論理・発想・思考についての考察と鍛え方
//・目次 - 単なる雑談
//---------------------------------------------------