📌 まずは問題を見ろ
→ javadrill.tech で出題された問題を見る(Step04)
問題のポイント
Map<String, Integer>
を使って、文字列の出現回数を数える基本パターンcontainsKey()
で存在チェック →put()
で +1- または
getOrDefault()
を使って初期値をうまく扱う
まず、日本語で考えろ
- リストに入ってるのは、注文された商品の名前。
- 「apple」が3回、「banana」が2回、「orange」が1回。
- つまり、「文字列の出現回数を数えて出す」だけ。
- でも、Map に慣れてないと、ここで手が止まる。
コメントを書け
“`java
// 商品名のリストを作る
// 空のMapを用意する(キー: 商品名、値: 出現回数)
// リストをループして、出現回数を1つずつ増やす
// Mapの中身を出力する
コメントに従ってコードを書け
import java.util.*;
public class MapUtil {
public static void countOrders() {
// 商品名のリストを作る
List<String> orders = Arrays.asList(
"apple", "banana", "apple", "orange", "banana", "apple"
);
// 空のMapを用意する(キー: 商品名、値: 出現回数)
Map<String, Integer> countMap = new HashMap<>();
// リストをループして、出現回数を1つずつ増やす
for (String item : orders) {
int current = countMap.getOrDefault(item, 0);
countMap.put(item, current + 1);
}
// Mapの中身を出力する
for (Map.Entry<String, Integer> entry : countMap.entrySet()) {
System.out.println(entry.getKey() + " → " + entry.getValue());
}
}
}
実行結果の例(順不同)
apple → 3
banana → 2
orange → 1
コードの解説
- 最初に注文一覧を
List<String>
で用意。 Map<String, Integer>
を使って、出現回数をカウント。getOrDefault(key, 0)
で、初期値0から +1 してput()
。- 最終的に、Map に商品名とその個数が入る。
つまづきやすいポイント
- 最初から
Map
にキーがあるとは限らない。ない場合は初期値1を入れる発想が大事。 containsKey()
で分岐してもよいが、getOrDefault()
を使えばスッキリ書ける。Stream API
を使えばもっと短くなるけど、今は書いて理解することが目的。慣れるまでは for 文で回せ。
teshのひとこと
「カウント処理」──これはMapが一番力を発揮する基本中の基本。
それなのに、つまずくやつが多いのは、“ない” という状態を想定できてないからや。
最初はゼロ。そこから足す。
あたりまえの処理こそ、Mapで“確かに”書けるようになれ。
Just keep typing, baby.
「ない」ことを想定しろ。コードに、ゼロから始める覚悟を刻め。