/**
* ドメイン非依存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);
ã‚ãªãŸã¯ã€å•†å“æƒ…å ±ã¨æ³¨æ–‡æƒ…å ±ã‚’ã‚‚ã¨ã«ã€æ¬¡ã®ã‚ˆã†ãªå‡¦ç†ã‚’è¡Œã† å•†å“æ³¨æ–‡ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ を作æˆã—ã¾ã™ã€‚ 以下ã®2ã¤ã®MapãŒã™ã§ã«å˜åœ¨ã—ã¦ã„ã¾ã™ï¼š 以下ã®ãƒ‡ãƒ¼ã‚¿ã‚’使ã£ã¦ã€å„商å“ã®åˆè¨ˆé‡‘é¡ã‚’計算ã—ã€æœ€çµ‚çš„ãªç·å£²ä¸Šé‡‘é¡ã‚’出力ã—ã¦ãã ã•ã„。 →解ç”例 ã‚ãªãŸã¯ã€ä¼šå“¡ç•ªå·ã¨åå‰ã‚’管ç†ã™ã‚‹ ã€Œå•†å“æ³¨æ–‡ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ã‚’完æˆã•ã›ã‚ˆã€
Map<String, Integer> priceMap:商å“å → å˜ä¾¡ï¼ˆå††ï¼‰Map<String, Integer> orderMap:商å“å → 注文数(個)
登録済ã¿å•†å“データ(priceMap)
"Apple" → 120
"Banana" → 80
"Orange" → 100æ³¨æ–‡æƒ…å ±ï¼ˆorderMap)
"Apple" → 3
"Banana" → 5
"Grape" → 2 ↠ã“ã®å•†å“ã¯ç™»éŒ²ã•れã¦ã„ãªã„ï¼
è¦ä»¶
"Grape"ï¼‰ãŒæ³¨æ–‡ã•れãŸå ´åˆã¯ 「エラーã¨ã—ã¦è¡¨ç¤ºã€ã—ã€è¨ˆç®—対象ã«å«ã‚ãªã„ã“ã¨foræ–‡ã€Mapã€containsKey()を使用ã™ã‚‹ã“ã¨ï¼ˆStream API ã¯ä½¿ã‚ãªã„)
テストコード(Main.java)
public class Main {
public static void main(String[] args) {
MapUtil.runOrderSimulator();
}
}
ヒント
orderMap をループã—ã€å•†å“åã§ priceMap.containsKey() を確èªã™ã‚‹System.out.println("エラー: ...") ã§è¡¨ç¤º
ã€Œå‰Šé™¤ã¨æ›´æ–°ã¯ãœã‚“ãœã‚“é•ã†ã€
Map<Integer, String> を扱ã£ã¦ã„ã¾ã™ã€‚
æ¬¡ã®æ“ä½œã‚’é †ã«è¡Œã£ã¦ã€ãã®éƒ½åº¦Mapã®çŠ¶æ…‹ã‚’å‡ºåŠ›ã—ã¦ãã ã•ã„:
remove() ã§å‰Šé™¤"Kato" ã« replace() ã§æ›´æ–°Map<Integer, String> を使用ã™ã‚‹ã“ã¨remove(key) 㨠replace(key, value) ã®æŒ™å‹•ã®é•ã„を明確ã«ã™ã‚‹ã“ã¨Map ã®ä¸èº«ã‚’出力ã—ã¦ç¢ºèªã™ã‚‹ã“ã¨for 文を用ã„ã¦æ˜Žç¤ºçš„ã«è¡¨ç¤ºã™ã‚‹ã“ã¨public class Main {
public static void main(String[] args) {
MapUtil.testRemoveAndReplace();
}
}
remove() ã¯ã‚ーã¨ãã®å€¤ã®ãƒšã‚¢ã‚’削除ã™ã‚‹replace() ã¯ã‚ーã®å€¤ã‚’別ã®å€¤ã§ä¸Šæ›¸ãã™ã‚‹ï¼ˆã‚ーãŒå˜åœ¨ã—ãªã‘れã°ä½•ã‚‚ã—ãªã„)remove() ã¯æˆ»ã‚Šå€¤ã‚り(削除ã•れãŸå€¤ï¼‰â†’è§£ç”例
102 ステップアップå•題 「Map修羅é“ã€
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
ã‚ãªãŸã¯ã€ä¼šå“¡IDã¨æ°åã‚’ Map<Integer, String> ã§ç®¡ç†ã—ã¦ã„ã¾ã™ã€‚
次ã®ãƒ‡ãƒ¼ã‚¿ã‚’Mapã«ç™»éŒ²ã—ã€ã™ã¹ã¦ã‚’出力ã—ã¦ãã ã•ã„:
ãã®å¾Œã€ä»¥ä¸‹ã‚’確èªã—ã¦ãã ã•ã„:
null ã‚’ã‚ーã¨ã—ã¦ä½¿ã£ãŸå ´åˆã€ç™»éŒ²ãƒ»å–å¾—ã¯ã§ãã‚‹ã‹ï¼Ÿnull を値ã¨ã—ã¦ä½¿ã£ãŸå ´åˆã€å‡ºåŠ›æ™‚ã«ã©ã†è¡¨ç¤ºã•れるã‹ï¼ŸHashMap を使ã†ã“ã¨ï¼ˆTreeMap 㯠null ã‚ーを許ã•ãªã„)null ã‚ー・値ã®ç™»éŒ²ãŒã§ãã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã“ã¨for æ–‡ã§Mapを出力ã—ã€çµæžœã‚’明示的ã«è¦³å¯Ÿã™ã‚‹ã“ã¨public class Main {
public static void main(String[] args) {
MapUtil.testNullBehavior();
}
}HashMap 㯠null ã‚ーを1ã¤ã ã‘許å¯ã™ã‚‹null 値ã¯ã„ãã¤ã§ã‚‚OK(ãŸã ã—æ‰±ã„ã«ã¯æ³¨æ„)null ãŒè¦‹ãˆã¦ã‚‚ã€ã‚¨ãƒ©ãƒ¼ã«ã¯ãªã‚‰ãªã„→解ç”例
]]>ã‚ãªãŸã¯ã€è¤‡æ•°ã®åº—舗ã«ãŠã‘る商å“ã®åœ¨åº«æƒ…å ±ã‚’ç®¡ç†ã—ã¦ã„ã¾ã™ã€‚
æ§‹é€ ã¨ã—ã¦ã¯ã€æ¬¡ã®ã‚ˆã†ã« Mapã®ä¸ã«Map ãŒã‚ã‚‹å½¢ã§ã™ï¼š
次ã®ãƒ‡ãƒ¼ã‚¿ã‚’Mapã«ç™»éŒ²ã—ã€ã™ã¹ã¦ã®æƒ…å ±ã‚’å‡ºåŠ›ã—ã¦ãã ã•ã„:
出力形å¼ï¼ˆé †ä¸åŒï¼‰ï¼š
Tokyo:
Apple → 10
Banana → 5
Osaka:
Apple → 7
Orange → 3
Map<String, Map<String, Integer>> を使ã†ã“ã¨for æ–‡ã§2é‡ãƒ«ãƒ¼ãƒ—ã—ã¦ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ã‚’出力ã™ã‚‹ã“ã¨public class Main {
public static void main(String[] args) {
MapUtil.printStoreInventory();
}
}
containsKey() ã§åº—舗(外å´ã®Map)をãƒã‚§ãƒƒã‚¯new HashMap<>() を使ã£ã¦åˆæœŸåŒ–→解ç”例
102 ステップアップå•題 「Map修羅é“ã€
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
ã‚ãªãŸã¯ã€å•†å“IDã¨å•†å“åã®å¯¾å¿œã‚’ Map<Integer, String> ã§ç®¡ç†ã—ã¦ã„ã¾ã™ã€‚
Mapã«æ¬¡ã®ãƒ‡ãƒ¼ã‚¿ã‚’登録ã—ã€ãã®å¾Œã€ã€Œã‚る商å“åã€ãŒMap内ã«å˜åœ¨ã™ã‚‹ã‹ã‚’判定ã—ã€ãã®IDを出力ã—ã¦ãã ã•ã„。
登録データ:
検索対象ã®å•†å“å(固定):”Banana”
出力例:
商å“å: Banana
商å“ID: 102
Map<Integer, String> を使用ã™ã‚‹ã“ã¨ï¼ˆã‚ーãŒID)public class Main {
public static void main(String[] args) {
MapUtil.findProductIdByName();
}
}
map.containsValue("Banana") ã¨ã„ã†ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã‚ã‚‹ãŒã€å€¤ã«å¯¾å¿œã™ã‚‹ã‚ーをå–ã‚‹ã«ã¯ãƒ«ãƒ¼ãƒ—ãŒå¿…è¦entrySet() ã§ key 㨠value ã‚’ä¸¡æ–¹åŒæ™‚ã«æ‰±ãˆã‚‹â†’è§£ç”例
102 ステップアップå•題 「Map修羅é“ã€
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
ã‚ãªãŸã¯ã€æ—¥æ›¿ã‚ã‚Šå®šé£Ÿã®æ³¨æ–‡ãƒ‡ãƒ¼ã‚¿ã‚’ Map<String, String> ã§è¨˜éŒ²ã—ã¦ã„ã¾ã™ã€‚
ã‚ãƒ¼ã¯æ—¥ä»˜ï¼ˆä¾‹: “2023-05-01″)ã€å€¤ã¯ãã®æ—¥ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§ã™ã€‚
次ã®ãƒ‡ãƒ¼ã‚¿ã‚’登録ã—ã€Mapã®å†…容を出力ã—ã¦ãã ã•ã„:
ã¾ãšã¯ HashMap を使ã£ã¦å‡ºåŠ›ã—ã¦ã¿ã¦ãã ã•ã„。
ãã®å¾Œã€TreeMap を使ã£ã¦å‡ºåŠ›ã—ã¦ã¿ã¦ãã ã•ã„。
HashMapã¨TreeMap)for æ–‡ã§ä¸èº«ã‚’出力ã™ã‚‹ã“ã¨import java.util.*; ã§ TreeMap を利用ã§ãã‚‹public class Main {
public static void main(String[] args) {
MapUtil.compareMapOrder();
}
}HashMap ã¯ç™»éŒ²é †ã‚„ã‚ーã®å¤§å°ã«é–¢ä¿‚ãªãã€é †åºã‚’ä¿è¨¼ã—ãªã„TreeMap ã¯ã‚ーã®è‡ªç„¶é †ï¼ˆæ–‡å—列ãªã‚‰è¾žæ›¸é †ï¼‰ã§ä¸¦ã³æ›¿ãˆã¦ä¿æŒã™ã‚‹â†’è§£ç”例
]]>ã‚ãªãŸã¯ã€æ³¨æ–‡ã•れãŸå•†å“ã®åå‰ãŒä¸¦ã‚“ã リストをå—ã‘å–りã¾ã—ãŸã€‚
ã“ã®ãƒªã‚¹ãƒˆã‹ã‚‰ã€å„商å“ãŒä½•回注文ã•れãŸã‹ã‚’カウントã—ã¦è¡¨ç¤ºã—ã¦ãã ã•ã„。
対象ã®ãƒªã‚¹ãƒˆã¯ä»¥ä¸‹ã¨ã—ã¾ã™ï¼š
List<String> orders = Arrays.asList(
"apple", "banana", "apple", "orange", "banana", "apple"
);
期待ã•れる出力例:
apple → 3
banana → 2
orange → 1
Map<String, Integer> を使ã£ã¦ã€å•†å“ã”ã¨ã®æ³¨æ–‡æ•°ã‚’カウントã™ã‚‹ã“ã¨for æ–‡ã§ãƒ«ãƒ¼ãƒ—ã—ã¦å‡¦ç†ã™ã‚‹ã“ã¨ï¼ˆStream APIã¯ä½¿ç”¨ç¦æ¢ï¼‰public class Main {
public static void main(String[] args) {
MapUtil.countOrders();
}
}
map.containsKey(key) ã§ã‚ーã®å˜åœ¨ã‚’確èªã§ãã‚‹map.getOrDefault(key, 0) を使ã†â†’è§£ç”例
102 ステップアップå•題 「Map修羅é“ã€
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
ã‚る商å“カテゴリã¨ã€ãれã«å±žã™ã‚‹å•†å“åã®å¯¾å¿œã‚’管ç†ã—ãŸã„。
次ã®ã‚ˆã†ãªã‚«ãƒ†ã‚´ãƒªã¨å•†å“ã‚’Mapã«ç™»éŒ²ã—ã€å‡ºåŠ›ã—ã¦ãã ã•ã„:
ãŸã ã—ã€Mapã®å€¤ã¨ã—㦠List<String> を使用ã—ã€ã‚«ãƒ†ã‚´ãƒªã”ã¨ã«è¤‡æ•°ã®å•†å“を登録ã§ãるよã†ã«ã—ã¦ãã ã•ã„。
Map<String, List<String>> を使用ã™ã‚‹ã“ã¨for 文を使ã£ã¦ã™ã¹ã¦ã®ã‚«ãƒ†ã‚´ãƒªã¨å•†å“を出力ã™ã‚‹ã“ã¨å‡ºåŠ›ä¾‹ï¼ˆé †ä¸åŒï¼‰ï¼š
Food:
Apple
Banana
Orange
Clothing:
T-shirt
Jeans
public class Main {
public static void main(String[] args) {
MapUtil.printCategoryMap();
}
}
List ã®ã¨ãã€è¦ç´ è¿½åŠ ã¯ map.get(key).add(...) ã§è¡Œã†put() å‰ã«ãã®ã‚ーã®å˜åœ¨ã‚’確èªã—ã€new ArrayList<>() を用æ„ã™ã‚‹å¿…è¦ãŒã‚る→解ç”例
102 ステップアップå•題 「Map修羅é“ã€
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™
ã‚ãªãŸã¯ã€ç¤¾å“¡ç•ªå·ã¨éƒ¨ç½²åã®å¯¾å¿œã‚’管ç†ã™ã‚‹Mapã‚’æŒã£ã¦ã„ã¾ã™ã€‚
以下ã®ãƒ‡ãƒ¼ã‚¿ã‚’Mapã«ç™»éŒ²ã—ã€å†…容を出力ã—ã¦ãã ã•ã„:
Mapを出力ã™ã‚‹éš›ã«ã€2é€šã‚Šã®æ–¹æ³•ã§å®Ÿè£…ã—ã¦ãã ã•ã„:
keySet() を使ã£ã¦å‡ºåŠ›entrySet() を使ã£ã¦å‡ºåŠ›Map<Integer, String> を使用ã™ã‚‹ã“ã¨for ループを使ã£ã¦ã€2通りã®å‡ºåŠ›æ–¹æ³•ã‚’è©¦ã™ã“ã¨public class Main {
public static void main(String[] args) {
MapUtil.printDepartments();
}
}keySet() ã¯ã‚ーã®é›†åˆã‚’è¿”ã™ï¼ˆå€¤ã‚’出ã™ã«ã¯ map.get(key) ãŒå¿…è¦ï¼‰entrySet() ã¯ã‚ーã¨å€¤ã®ãƒšã‚¢ï¼ˆEntry)を直接扱ãˆã‚‹â†’è§£ç”例
]]>ã‚ãªãŸã¯ã€ã‚るイベントã®å‚åŠ è€…å簿を管ç†ã—ã¦ã„ã¾ã™ã€‚
åç°¿ã¯ã€Œä¼šå“¡ç•ªå·ï¼ˆint)ã€ã‚’ã‚ーã¨ã—ã¦ã€ã€Œåå‰ï¼ˆString)ã€ã‚’値ã¨ã™ã‚‹ Map ã§è¨˜éŒ²ã•れã¾ã™ã€‚
ä»¥ä¸‹ã®æƒ…å ±ã‚’Mapã«ç™»éŒ²ã—ã¦ãã ã•ã„:
ãã®ã†ãˆã§ã€Mapã®å†…容を出力ã—ã¦ãã ã•ã„。
Map<Integer, String> を使ã†ã“ã¨put ã—ãŸã¨ãã®å‹•作を確èªã™ã‚‹ã“ã¨System.out.println(map) を使ã‚ãšã€for æ–‡ã§ä¸èº«ã‚’明示的ã«å‡ºåŠ›ã™ã‚‹ã“ã¨public class Main {
public static void main(String[] args) {
MapUtil.printMemberMap();
}
}Map.put(key, value) ã‚’åŒã˜ã‚ーã§è¤‡æ•°å›žä½¿ã†ã¨ã©ã†ãªã‚‹ï¼ŸMap.entrySet() ã§ãƒ«ãƒ¼ãƒ—ã•ã›ã‚Œã°ã€ã‚ーã¨å€¤ã‚’åŒæ™‚ã«å–り出ã›ã‚‹â†’è§£ç”例
]]>