1. apple=100, banana=80, cherry=200 の合計 380 を返す
コース一覧
Java 中級:コレクション・Stream・例外処理
Map を走査する

Java 中級:コレクション・Stream・例外処理

コレクション、ジェネリクス、例外処理、Stream API、関数型インターフェース、日付処理、ファイル I/O、継承など Java の中級トピックを実践的に学べるコースです。Java の基礎文法とオブジェクト指向を理解している学習者を対象に、現場の Java コードを読み書きするための知識を補強します。約 16 時間 (1 日 30 分 × 32 日) で 64 レッスンを修了でき、修了後は Spring Boot や業務システム開発に必要な Java 力が身につきます。

1
コレクション基礎
01. ArrayList を使う5分
02. List を走査する5分
03. 要素の削除と検索5分
04. HashMap の基本5分
05. Map を走査する5分
06. Set で重複を排除5分
07. Collections クラスの便利メソッド5分
08. コレクション基礎 まとめクイズ5分
2
ジェネリクス
01. ジェネリッククラスを作る5分
02. ジェネリックメソッド5分
03. 境界型パラメータ5分
04. ワイルドカード ?5分
05. Pair<K,V> を作る5分
06. ジェネリクス まとめクイズ5分
3
例外処理
01. try-catch で例外をつかむ5分
02. 複数の catch ブロック5分
03. throws と例外の伝播5分
04. 独自の例外を作る5分
05. try-with-resources5分
06. finally ブロック5分
07. 例外処理 まとめクイズ5分
4
Stream API
01. Stream を作る5分
02. filter で絞り込む5分
03. map で変換する5分
04. reduce で集約する5分
05. collect で集める5分
06. sorted で並び替え5分
07. distinct で重複排除5分
08. limit と skip5分
09. 並列ストリーム5分
10. Stream API まとめクイズ5分
5
関数型インターフェース
01. ラムダ式の基本5分
02. メソッド参照 ::5分
03. Function インターフェース5分
04. Predicate インターフェース5分
05. Consumer と Supplier5分
06. BiFunction と 2 引数の関数5分
07. 関数型インターフェース まとめクイズ5分
6
文字列操作
01. String.format で書式化5分
02. StringBuilder で連結5分
03. 正規表現の基本5分
04. split と join5分
05. 文字列操作 まとめクイズ5分
7
日付と時刻
01. LocalDate で日付を扱う5分
02. LocalDateTime で時刻も扱う5分
03. Duration で時間差を計算5分
04. 日付の書式化とパース5分
05. 日付の加減算5分
06. 日付と時刻 まとめクイズ5分
8
ファイル I/O
01. Files でファイルに書き込む5分
02. ファイルを行単位で読む5分
03. Path でファイルパスを扱う5分
04. BufferedReader と Stream API5分
05. ファイルの存在確認と削除5分
06. ファイル I/O まとめクイズ5分
9
継承とポリモーフィズム
01. extends で継承する5分
02. super で親を呼ぶ5分
03. メソッドのオーバーライド5分
04. abstract で抽象クラス5分
05. interface で契約を定義5分
06. default メソッド5分
07. instanceof と型パターン5分
08. ポリモーフィズムを活かす5分
09. 継承とポリモーフィズム まとめクイズ5分

Map を走査する

キーで回すと、同じ場所を 2 回引くことになる

Map の中身を全部見たいとき、まず思いつくのはキーの一覧を回す書き方です。

Java

for (String day : visits.keySet()) { System.out.println(day + " は " + visits.get(day) + " 人"); }

動きますが、keySet() からキーを 1 つ取り出すたびに、get(day) でもう一度同じ場所を探しに行っています。キーと値の両方を使う処理なら、はじめからペアで受け取るほうが素直です。

その役をするのが entrySet() で、キーと値をひとまとめにした Map.Entry を順に返します。

Java

import java.util.LinkedHashMap; import java.util.Map; public class Demo { public static void main(String[] args) { Map<String, Integer> visits = new LinkedHashMap<>(); visits.put("mon", 12); visits.put("tue", 8); for (Map.Entry<String, Integer> e : visits.entrySet()) { System.out.println(e.getKey() + " / " + e.getValue()); } } }

e.getKey() でキー、e.getValue() で値が取れます。値しか使わないなら values() を回す手もありますが、片方だけで足りる場面は意外と少ないものです。

入れた順に出てこないと困る

ここが Map の走査でいちばん引っかかるところです。HashMap は取り出す順番を保証しません。put した順に並ぶこともあれば、まったく違う順で出てくることもあり、こちらからは決められません。

順番を守ってほしいなら LinkedHashMap を使います。

Java

Map<String, Integer> visits = new LinkedHashMap<>(); // put した順に出てくる Map<String, Integer> ranked = new TreeMap<>(); // キーの昇順に並ぶ

使い方はどちらも HashMap と同じで、new するクラスを差し替えるだけです。左辺の型は Map のまま変えません。表示や集計の結果を毎回そろえたい場面では、迷わず LinkedHashMap を選んでください。

つまずくところ

Map.Entry は Map の中に入れ子で定義されている型です。import java.util.Map; を書いておけば Map.Entry<String, Integer> と書けます。java.util.Map.Entry まで import すれば Entry<String, Integer> と短くできますが、最初は入れ子のまま書くほうが迷いません。

もう 1 つ、走査している最中に put や remove で中身を変えると ConcurrentModificationException が飛びます。entrySet() が返すのは中身のコピーではなく、Map をそのまま覗いている窓だからです。読むだけのループにしておけば起きません。

課題では、順番が保証される Map を作り、ペアを 1 つずつ取り出しながら値を集計します。Map.Entry の型を書くところで手が止まりやすいので、上の例の書き方をよく見てから始めてください。

要件

  1. クラス名は Solution、メソッド名は totalValue (引数なし、戻り値 int) にすること
  2. java.util.LinkedHashMap<String,Integer> を使い、apple=100 banana=80 cherry=200 の順に put すること
  3. map.entrySet() を for-each で走査し、e.getValue() を sum に足し合わせて return すること

入出力例

totalValue() → 380

ヒント

`LinkedHashMap` は `java.util.LinkedHashMap` です。フルパスで書くか `import java.util.LinkedHashMap;` を先頭に書きましょう

`for-each` の型は `java.util.Map.Entry<String,Integer>` です。`map.entrySet()` を回すと `Entry` が 1 つずつ取れます

値の合計だけ欲しい場合は `e.getValue()` を `sum` に加算します。`getKey()` は使わなくても問題ありません

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • Set で重複を排除

    Java の Set を使って、コレクションから重複した要素を取り除く方法を学びます。HashSet と LinkedHashSet と TreeSet の違い、Set ならではの API を整理しよう。

  • Collections クラスの便利メソッド

    java.util.Collections の sort / max / min / reverse / shuffle を使いこなして、List を自由自在に操作しよう。

  • コレクション基礎 まとめクイズ

    コレクション基礎 (List / Map / Set / Collections) の総まとめ。使い分けと内部の仕組みを 4 択クイズで確認する。

  • ジェネリッククラスを作る

    型パラメータ `<T>` を使って、任意の型を受け取れるジェネリッククラス `Box<T>` を自分で定義し、文字列を包んで取り出すコードを書いてみよう。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 処理計算や代入を表す長方形
  • クラスデータと振る舞いを束ねる単位
  • ループ繰り返し処理。矢印で戻すか専用記号で示す
  • メソッドクラスに属する関数
  • 引数位置引数=順番で渡す。
  • 戻り値呼び出し元への返答を表す点線矢印
main.java
学習モード
エディタを読み込んでいます

メモ

Map を走査する

⌘S で保存