/** * ドメイン非依存URL出力フィルタ * javadrill.tech移行時はwp_options.home/siteurlのみ変更すればよい * * データベースには絶対URL(https://minner.asia)を保持し、 * 表示時に現在のドメイン(home_url())に動的変換する */ function javadrill_make_urls_dynamic($content) { if (empty($content)) { return $content; } // データベース内の絶対URLを現在のhome_url()に置換 $old_url = 'https://minner.asia'; $new_url = untrailingslashit(home_url()); // http版も対応(念のため) $content = str_replace($old_url, $new_url, $content); $content = str_replace('http://minner.asia', $new_url, $content); return $content; } // 投稿本文、ウィジェット、タームの説明、抜粋に適用 add_filter('the_content', 'javadrill_make_urls_dynamic', 20); add_filter('widget_text', 'javadrill_make_urls_dynamic', 20); add_filter('term_description', 'javadrill_make_urls_dynamic', 20); add_filter('get_the_excerpt', 'javadrill_make_urls_dynamic', 20); 102 「Map修羅道」 Step05 解答例 | Javaドリル

102 「Map修羅道」 Step05 解答例

102-step05 102「Map修羅道」

MapUtil.java

import java.util.*;

public class MapUtil {
    public static void compareMapOrder() {
        // --- HashMapを使った場合 ---
        System.out.println("=== HashMap の出力 ===");

        // 順序が保証されないMap
        Map<String, String> hashMap = new HashMap<>();
        hashMap.put("2023-05-03", "Curry");
        hashMap.put("2023-05-01", "Sushi");
        hashMap.put("2023-05-02", "Pasta");

        for (String date : hashMap.keySet()) {
            String menu = hashMap.get(date);
            System.out.println(date + " → " + menu);
        }

        // --- TreeMapを使った場合 ---
        System.out.println("=== TreeMap の出力 ===");

        // TreeMapにHashMapの内容を渡して変換
        Map<String, String> treeMap = new TreeMap<>(hashMap);

        for (String date : treeMap.keySet()) {
            String menu = treeMap.get(date);
            System.out.println(date + " → " + menu);
        }
    }
}

解説:Mapに順序を求めるときの注意点

JavaのMapにはいくつかの実装があります。
それぞれ順序の扱いが異なるため、出力の順番に意味がある場合は注意が必要です。


HashMap:順序なし(非決定的)

Map<String, String> map = new HashMap<>();
  • 要素の並び順は保証されない
  • 登録順にも、キーの大小にも関係ない
  • 出力結果は実行のたびに変わる可能性あり(内部のハッシュテーブル次第)

TreeMap:キーの自然順(昇順)

Map<String, String> map = new TreeMap<>(hashMap);
  • キーの順序に従って自動で並び替えて保持
  • 文字列なら辞書順、数値なら昇順になる
  • new TreeMap<>(hashMap) のように変換も可能

実行結果の例(順不同・ただしTreeMapは昇順で固定)

=== HashMap の出力 ===
2023-05-03 → Curry
2023-05-01 → Sushi
2023-05-02 → Pasta

=== TreeMap の出力 ===
2023-05-01 → Sushi
2023-05-02 → Pasta
2023-05-03 → Curry

まとめ:このステップで学ぶべきこと

  • HashMapは順序を持たない
  • TreeMapはキーの昇順で保持される
  • 順序が重要な場合はMapの種類を選ぶ必要がある

出力の順序でロジックが変わる場面では、Mapの選定がバグを防ぐ鍵になります。

102 ステップアップ問題 「Map修羅道」


Just Keep Typing, Baby!では、この「Map修羅道」でつまづいた人向けの解説をしています。こちらもぜひ!

// tesh:
// これ、わかってないと次で爆死する。今、拾っとけ。

コメント

タイトルとURLをコピーしました