カテゴリ: Java 更新日: 2026/07/03

JavaのStreamのmaxを完全解説!初心者でもわかる最大値の取得方法

Streamのmaxメソッド
Streamのmaxメソッド

先生と生徒の会話形式で理解しよう

生徒

「先生、Javaでリストの中で一番大きい数値を取得したいときはどうすればいいですか?」

先生

「その場合はStreamのmaxメソッドを使うと簡単に最大値を取得できます。」

生徒

「maxとreduceやcollectでは何が違うんですか?」

先生

「reduceは値を一つに集約するための汎用的な方法で、collectはストリームをリストやセットなどにまとめます。maxは特に最大値を取得する専用のメソッドです。」

1. maxメソッドとは何か

「1. maxメソッドとは何か」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

1. maxメソッドとは何か
1. maxメソッドとは何か

JavaのStreamのmaxメソッドは、ストリーム内の要素の中で最大の値を取得するための終端操作です。Comparatorを指定することで、数値だけでなく文字列やカスタムオブジェクトでも最大値を求めることができます。forループで比較して最大値を求める処理を簡潔に書き換えられるため、初心者でも直感的に理解できます。

2. 基本的な使い方

2. 基本的な使い方
2. 基本的な使い方

整数のリストから最大値を取得する基本例です。Streamを作成してmaxメソッドにComparatorを渡すだけで最大値が取得できます。


import java.util.List;
import java.util.Comparator;
import java.util.Optional;

public class MaxExample {
    public static void main(String[] args) {
        List<Integer> numbers = List.of(5, 3, 8, 1, 6);
        Optional<Integer> max = numbers.stream()
                                           .max(Comparator.naturalOrder());
        max.ifPresent(System.out::println);
    }
}

8

3. Optional型で返される理由

3. Optional型で返される理由
3. Optional型で返される理由

maxメソッドはOptional型で結果を返します。これはストリームが空の場合に備えるためです。Optionalを使うことでnullチェックを行う必要がなく、ifPresentやorElseを使って安全に値を扱うことができます。初心者はOptionalの基本を理解すると、ストリームの結果を安心して処理できます。

4. 文字列の最大値

「4. 文字列の最大値」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

4. 文字列の最大値
4. 文字列の最大値

maxメソッドは文字列の最大値も取得できます。文字列の最大値は辞書順で決まります。Streamを使うと簡単に文字列の最大値を求められます。


import java.util.List;
import java.util.Comparator;
import java.util.Optional;

public class MaxStringExample {
    public static void main(String[] args) {
        List<String> words = List.of("りんご", "みかん", "バナナ", "ぶどう");
        Optional<String> maxWord = words.stream()
                                            .max(Comparator.naturalOrder());
        maxWord.ifPresent(System.out::println);
    }
}

りんご

5. カスタムオブジェクトでの使用

5. カスタムオブジェクトでの使用
5. カスタムオブジェクトでの使用

カスタムオブジェクトでもmaxメソッドは使用可能です。Comparatorを工夫することで、オブジェクトの特定フィールドに基づいて最大値を取得できます。初心者はまず数値や文字列で試し、慣れてきたらオブジェクトでも応用すると理解が深まります。


import java.util.List;
import java.util.Comparator;
import java.util.Optional;

class Fruit {
    String name;
    int price;
    Fruit(String name, int price) {
        this.name = name;
        this.price = price;
    }
}

public class MaxObjectExample {
    public static void main(String[] args) {
        List<Fruit> fruits = List.of(
            new Fruit("りんご", 100),
            new Fruit("みかん", 80),
            new Fruit("バナナ", 120)
        );
        Optional<Fruit> mostExpensive = fruits.stream()
                                                  .max(Comparator.comparingInt(f -> f.price));
        mostExpensive.ifPresent(f -> System.out.println(f.name + " : " + f.price));
    }
}

バナナ : 120

6. 注意点とコツ

6. 注意点とコツ
6. 注意点とコツ

maxメソッドは終端操作なので、一度ストリームで使用すると再利用できません。空のストリームに対して呼び出す場合はOptionalが空になることに注意が必要です。数値や文字列だけでなく、カスタムオブジェクトのフィールド比較にも柔軟に使えるため、初心者でも段階的に練習するとストリーム処理の理解が深まります。

まとめ

「まとめ」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

まとめ
まとめ

JavaのStreamのmaxメソッドの基本をしっかり理解しよう

JavaのStream APIにおけるmaxメソッドは、コレクションの中から最大値を簡単に取得できる非常に便利な終端操作です。 従来のfor文を使った比較処理と比べて、コードが短くなり、処理の意図も明確に表現できる点が大きな特徴です。 Java初心者にとっても、Streamの基本を学ぶうえで最初に触れておきたい重要なメソッドの一つです。

maxメソッドはComparatorと組み合わせて使用することで、数値だけでなく文字列やカスタムオブジェクトの最大値も柔軟に取得できます。 この柔軟性こそが、Stream APIの大きな魅力であり、実務開発でも多くの場面で活用されています。

Comparatorを理解することが最大値取得のポイント

maxメソッドを正しく使いこなすためには、Comparatorの理解が欠かせません。 Comparatorは「どの値を大きいと判断するか」を定義する役割を持っており、naturalOrderやcomparingなどを使うことで、簡単に比較ルールを指定できます。

例えば数値の場合は自然順序で問題ありませんが、オブジェクトの場合は特定のフィールドを基準にする必要があります。 そのため、Comparatorの使い方を理解することで、より実践的なコードを書けるようになります。


import java.util.List;
import java.util.Comparator;

public class SummaryMaxExample {
    public static void main(String[] args) {
        List<Integer> list = List.of(10, 25, 3, 42, 7);

        int max = list.stream()
                .max(Comparator.naturalOrder())
                .orElse(0);

        System.out.println("最大値: " + max);
    }
}

最大値: 42

Optional型の扱いに慣れることが重要

maxメソッドはOptional型で結果を返します。これは、ストリームが空の場合に備えた安全設計です。 初心者にとっては少し難しく感じるかもしれませんが、Optionalを使うことでnullチェックのミスを防ぐことができます。

orElseを使ってデフォルト値を設定したり、ifPresentで値が存在する場合のみ処理を行うなど、安全なデータ処理の考え方を身につけることができます。 このOptionalの扱いは、Javaの現代的な開発スタイルにおいて非常に重要です。


import java.util.List;
import java.util.Comparator;

public class OptionalExample {
    public static void main(String[] args) {
        List<Integer> list = List.of();

        int result = list.stream()
                .max(Comparator.naturalOrder())
                .orElse(-1);

        System.out.println("結果: " + result);
    }
}

結果: -1

カスタムオブジェクトでの応用が実務で重要

実務開発では、単純な数値よりもオブジェクトの中から最大値を取得するケースが多くなります。 例えば商品の価格やユーザーのスコアなど、特定のフィールドを基準に最大値を求める場面です。

Comparator.comparingを使うことで、オブジェクトの中の値を簡単に比較できるため、コードの可読性と保守性が大きく向上します。 この書き方を習得することで、Stream APIの実践力が一気に高まります。


import java.util.List;
import java.util.Comparator;

class User {
    String name;
    int score;
    User(String name, int score) {
        this.name = name;
        this.score = score;
    }
}

public class ObjectMaxExample {
    public static void main(String[] args) {
        List<User> users = List.of(
            new User("山田", 80),
            new User("佐藤", 95),
            new User("鈴木", 88)
        );

        User top = users.stream()
                .max(Comparator.comparingInt(u -> u.score))
                .orElse(null);

        if (top != null) {
            System.out.println(top.name + " : " + top.score);
        }
    }
}

佐藤 : 95

maxとreduceの違いも理解しておこう

maxは最大値を取得する専用メソッドですが、reduceでも同様の処理を実現できます。 ただし、reduceは汎用的である分、コードが少し複雑になります。 そのため、単純に最大値を求める場合はmaxを使う方が可読性が高くおすすめです。

適切なメソッドを選択することは、読みやすく保守しやすいコードを書くうえで重要なポイントです。

初心者が身につけるべき学習の流れ

まずは整数リストでmaxメソッドを使い、最大値を取得する基本的な使い方を理解しましょう。 次にOptionalの扱い方に慣れ、orElseやifPresentを使えるようになることが大切です。 その後、文字列やオブジェクトへと応用することで、実務レベルのスキルへと発展させることができます。

Stream APIは最初は難しく感じるかもしれませんが、maxメソッドのようなシンプルな処理から段階的に学ぶことで、自然に理解が深まります。

先生と生徒の振り返り会話

生徒

maxメソッドを使うと簡単に最大値が取れるんですね

先生

はい Comparatorと組み合わせることで様々なデータに対応できます

生徒

Optionalで返ってくる理由も理解できました

先生

空のデータでも安全に処理できるようにするためです

生徒

オブジェクトの最大値も取得できるのが便利ですね

先生

実務ではその使い方が特に重要になります

生徒

Streamの理解が少し深まりました

先生

この調子で少しずつ応用へ進んでいきましょう

Javaの基礎を最初から体系的に学びたい人には、 初心者向けで定評のある定番入門書がこちらです。

スッキリわかるJava入門 第5版をAmazonで見る

※ Amazon広告リンク

カテゴリの一覧へ
新着記事
New1
Spring
Spring の@RequestParamの使い方!テキストボックス、ラジオボタン、チェックボックス、セレクトボックスの値を受け取る。
更新記事
New2
JSP
EL式の基本構文まとめ!${}で使う書き方のルールを解説
更新記事
New3
Java
JavaのBigIntegerとisProbablePrimeメソッドを完全解説!初心者でもわかる素数判定
更新記事
New4
JSP
JSPで発生する主なエラーとは?初心者向けに原因と対処法をやさしく解説
新規投稿
人気記事
No.1
Java&Spring記事人気No1
JSP
JSPのおすすめ学習・用語まとめ【2026年最新版】初心者が知っておきたい基本をやさしく解説
No.2
Java&Spring記事人気No2
Java
Javaのクラスとインスタンス化、コンストラクタの使い方完全ガイド!初心者でもわかるオブジェクト指向の基礎
No.3
Java&Spring記事人気No3
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.4
Java&Spring記事人気No4
Spring
Thymeleaf(タイムリーフ)入門!初心者でもわかるSpring Bootとテンプレートエンジンの使い方
No.5
Java&Spring記事人気No5
Spring
Javaの@PreAuthorizeアノテーションを完全ガイド!初心者でもわかるメソッドセキュリティ設定
No.6
Java&Spring記事人気No6
Spring
Springの@Queryアノテーションを徹底解説!初心者でもわかるSpring Bootのカスタムクエリ
No.7
Java&Spring記事人気No7
Java
JavaのExceptionクラスを完全解説!初心者でも理解できる例外処理の基本
No.8
Java&Spring記事人気No8
JSP
JSPでCSSやJSを読み込む基本!外部ファイルのパス指定に注意しよう