1. 6 要素の配列で skip(2) → limit(3) すると 3,4,5 番目の合計 (30+40+50=120) になる
  2. 5 要素の配列で skip(2) → limit(3) すると 3,4,5 番目の合計 (3+4+5=12) になる
  3. 2 要素しかない配列は skip(2) で空になり 0 を返す
  4. 3 要素の配列は skip(2) で 1 件残り、その合計 (3) を返す
  5. skip(2) → limit(3) が範囲を超える場合は残った要素 (4,5,6,7 番目 = 40+50+60=150) を超えず 3 件で打ち切る
コース一覧
Java 中級:コレクション・Stream・例外処理
limit と skip

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分

limit と skip

上位 5 件が見たいだけなのに、全部出てくる

売上ランキングの上位 5 件だけ表示したい、というのはよくある要求です。for で書くと、カウンタを 1 つ増やして、途中で break することになります。

Java

int i = 0; for (String row : ranking) { System.out.println(row); i++; if (i == 5) break; }

表示したいのは 5 行なのに、行数を数える変数と、抜ける条件が別々に必要です。limit(5) を使えば、この 2 つが 1 つになります。

Java

List<String> top5 = ranking.stream().limit(5).toList();

limit(n) は先頭から n 件通したところで、流すのをやめます。残りは読みにも行きません。件数が足りないときも例外は出ません。3 件しか無いところに limit(10) を書けば、あるだけの 3 件が返ります。

skip は逆に、先頭を捨てる

skip(n) は反対で、先頭の n 件を捨てて、それ以降を通します。CSV の 1 行目にヘッダが入っているときに便利です。

Java

List<String> body = lines.stream().skip(1).toList();

こちらも、n が要素数より大きいときに例外は出ません。全部飛ばされて、空のまま次に進みます。

順番を入れ替えると、別の結果になる

limit と skip はどちらも中間操作なので、つなげて書けます。ただし書く順番で結果が変わります。

skip(1).limit(2) は、まず先頭 1 件を捨ててから、残った中の先頭 2 件を通します。手元に 5 件あるなら、2 件目と 3 件目が残ります。

limit(2).skip(1) は、まず先頭 2 件だけに絞ってから、その中の先頭 1 件を捨てます。残るのは 2 件目だけです。

同じ 2 つのメソッドを同じ引数で呼んでいるのに、結果は 2 件と 1 件で違います。「捨ててから取る」なのか「取ってから捨てる」なのかを、書く前に日本語で言えるようにしておくと間違えません。

解説

件数が足りないときに例外を投げてくれないのは、便利な反面わなでもあります。skip(10) を書いたのに空が返ってくるときは、元データが 10 件に届いていないことを疑ってください。

やってみよう

Solution.windowSum(int[] arr) を完成させて、配列の 3 件目から 5 件目までの合計を返してください。

ファイルの先頭に import java.util.stream.IntStream; を書き、IntStream.of(arr) で Stream を作ります。先頭 2 件を捨てる skip と、そこから 3 件だけ通す limit を、この順番でつないでください。最後に sum() で合計を取ります。自前の for で足し込むのは禁止です。

要素が 2 件しか無い配列を渡されたときは、捨てた時点で何も残らないので、合計は 0 になります。ここでも長さを調べる if は要りません。

要件

  1. ファイル先頭で import java.util.stream.IntStream; を書くこと
  2. IntStream.of(arr) で int[] から IntStream を作り、.skip(2) .limit(3) の順で中間操作を呼ぶこと
  3. 終端操作 .sum() を呼んで合計を int で return すること (自前の for ループで合計しないこと)

入出力例

windowSum([10,20,30,40,50,60]) → 120 windowSum([1,2,3,4,5]) → 12 windowSum([1,2]) → 0 windowSum([1,2,3]) → 3 windowSum([5,10,15,20,25,30,35,40]) → 60

ヒント

`skip` と `limit` の順序が逆になると結果が変わります。今回は必ず `.skip(2).limit(3)` の順で書いてください

要素が 2 件以下のときは `skip(2)` で空の `IntStream` になり、`sum()` は何も足さずに `0` を返してくれます。`if` での特別扱いは不要です

`IntStream` の `sum()` は戻り値が `int` です。`Stream<Integer>` の場合は `mapToInt` で `IntStream` に変換してから `sum()` を呼びます

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

関連レッスン

  • 並列ストリーム

    Stream API の parallel() で配列を複数 CPU コアに分割集計させる並列ストリームの仕組みと、結合性・スレッド安全・順序保証など並列化の落とし穴を学びます。

  • Stream API まとめクイズ

    Stream API 章で学んだ生成 / filter / map / reduce / collect / sorted / distinct / limit / skip / parallel を、メソッドチェーンの順序と中間操作・ターミナル操作の使い分けで総ざらいする 4 択クイズ。

  • ラムダ式の基本

    Java 8 から導入されたラムダ式の文法と関数型インターフェースの考え方を学び、Stream と組み合わせて配列の合計を一行で書く感覚を身につけよう。

  • String.format で書式化

    `Java` の `String.format` で `%s` `%d` `%,d` `%.2f` などの書式指定子を使い、整形された文字列を組み立てる方法を学ぼう。

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

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

  • カウンタ数を保持して増減する典型 UI
  • 変数データに名前をつけて参照する仕組み
  • 素数1 と自分自身でしか割り切れない自然数
  • メソッドクラスに属する関数
  • 引数位置引数=順番で渡す。
  • 配列サイズ固定の同型データの集まり
  • ループ繰り返し処理。矢印で戻すか専用記号で示す
main.java
学習モード
エディタを読み込んでいます

メモ

limit と skip

⌘S で保存