カテゴリ: Java 更新日: 2026/09/04

Javaのラムダ式で戻り値とvoidの使い方を解説!returnの書き方も完全理解

【ラムダ式】戻り値・void・returnの扱い方
【ラムダ式】戻り値・void・returnの扱い方

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

生徒

「Javaのラムダ式で戻り値を使いたいとき、どう書いたらいいんですか?」

先生

「戻り値がある場合はreturnを使うこともできますが、実は省略もできるんですよ。」

生徒

「えっ、省略できるんですか?void型のときはどうなるんですか?」

先生

「では、Javaのラムダ式における戻り値とvoidの扱い、そしてreturnの書き方を順番に学んでいきましょう。」

1. ラムダ式での戻り値とは

1. ラムダ式での戻り値とは
1. ラムダ式での戻り値とは

Javaのラムダ式は「関数型インタフェース」の形に合わせて書きます。インタフェース側が戻り値の型を決めているので、ラムダ式はその型の値を返す必要があります(例:FunctionBiFunctionは値を返す)。

基本構文は次のとおりです。まずは「式だけの1行」と「複数行ブロック」の2パターンを覚えましょう。


引数 -> 式                 // 1行:returnも{}も省略OK(式の値がそのまま戻る)
引数 -> { 処理; return 値; } // 複数行:{}とreturnが必要
超ミニ例(戻り値あり)

import java.util.function.Function;
import java.util.function.BiFunction;

// 1行:平方を返す(式=戻り値)
Function<Integer, Integer> square = x -> x * x;

// 複数行:メッセージを挟んでから長さを返す(return必須)
Function<String, Integer> len = s -> {
    System.out.println("文字列: " + s);
    return s.length();
};

// 2引数を足し算して返す(BiFunctionは2引数+戻り値)
BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;

ポイントは「式が1行ならreturn省略」「複数行は{}+return」。戻り値が必要な型(例:Function<T,R>)に対して値を返さないとコンパイルエラーになるので、まずはこの型と書き方の対応だけ意識すればOKです。

2. 戻り値を返すラムダ式の基本

2. 戻り値を返すラムダ式の基本
2. 戻り値を返すラムダ式の基本

「値を計算して返す」ラムダ式は、Functionなど“戻り値あり”の関数型インタフェースを使います。まずは 1行=return省略/複数行={}とreturn必須の2パターンだけ掴みましょう。

最小の例(1行・return省略)

import java.util.function.Function;

Function<Integer, Integer> square = x -> x * x; // 計算結果がそのまま戻り値
int v = square.apply(5); // => 25
複数行の処理({}+returnが必要)

import java.util.function.Function;

Function<Integer, Integer> safeSquare = x -> {
    if (x == null) return 0;     // 必ず値を返す
    int result = x * x;
    return result;               // returnを明示
};
2引数の戻り値(BiFunction)

2つの引数から1つの結果を作る場合はBiFunctionを使います。


import java.util.function.BiFunction;

BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
int sum = add.apply(3, 7); // => 10
真偽を返す戻り値(Predicate)

条件判定はPredicate(戻り値はboolean)。


import java.util.function.Predicate;

Predicate<String> isEmpty = s -> s == null || s.isEmpty();
boolean ok = isEmpty.test(""); // => true

まとめ:式1行ならreturn不要複数行なら{}+return。 「どの型を返すか」はインタフェース側(例:Function<T,R>R)が決めます。 戻り値ありの型で値を返さないとコンパイルエラーになる点だけ、最初に意識しておくと迷いません。

3. void型(戻り値なし)のラムダ式

3. void型(戻り値なし)のラムダ式
3. void型(戻り値なし)のラムダ式

「何かを表示する・書き込む・通知する」など、結果を返さず副作用だけ起こす処理では ConsumerRunnableを使います。戻り値がvoidなので、値を返すreturn 値;は書きません。 (ブロック内で処理を打ち切るreturn;だけは可)

1) Consumer:1つ受け取って何かする(printなど)

import java.util.function.Consumer;

// 1行:メッセージを表示(値は返さない)
Consumer<String> printer = msg -> System.out.println("メッセージ:" + msg);
printer.accept("こんにちは"); // => メッセージ:こんにちは

// 複数行:前処理→表示({}を使う。戻り値は書かない)
Consumer<String> verbosePrinter = msg -> {
    if (msg == null || msg.isBlank()) {
        System.out.println("空の入力です");
        return; // ここで処理だけ終了(値は返さない)
    }
    System.out.println("[INFO] " + msg);
};
2) Runnable:引数も戻り値もなし(「とにかく実行」)

Runnable runTask = () -> {
    System.out.println("処理を開始します");
    // ... ここに実行したい処理を書く ...
    System.out.println("処理が終了しました");
};
runTask.run();
3) BiConsumer:2つ受け取って何かする(ログや集計の記録に)

import java.util.function.BiConsumer;

BiConsumer<String, Integer> logScore = (name, score) ->
        System.out.println(name + " さんの点数:" + score);
logScore.accept("太郎", 85);

まとめ:値を返さない=画面表示・ログ・ファイル出力などに最適。 1行なら{}不要、複数行なら{}を使います。return 値;は書かない点だけ意識すればOKです。

4. returnの書き方と省略ルール

4. returnの書き方と省略ルール
4. returnの書き方と省略ルール

Javaのラムダ式でreturnを使うかどうかは、処理の行数に応じて変わります。

  • 1行のみの場合:returnを省略できる
  • 複数行の場合:returnが必要、ブロックも必要

例えば、以下のように1行だけならreturnは書かなくてもOKです:


Function<String, Integer> strLength = s -> s.length();

しかし、2行以上の処理がある場合は次のように記述します:


Function<String, Integer> strLength = s -> {
    System.out.println("文字列:" + s);
    return s.length();
};

5. 戻り値・voidの違いをサンプルで確認

5. 戻り値・voidの違いをサンプルで確認
5. 戻り値・voidの違いをサンプルで確認

import java.util.function.*;

public class LambdaReturnVoidExample {
    public static void main(String[] args) {
        // 戻り値あり
        Function<Integer, Integer> doubleIt = x -> x * 2;
        int result = doubleIt.apply(10);
        System.out.println("2倍の値:" + result);

        // 戻り値なし(void)
        Consumer<String> sayHello = name -> System.out.println("こんにちは、" + name + "さん!");
        sayHello.accept("太郎");

        // 複数行+returnあり
        Function<Integer, String> judge = n -> {
            if (n > 0) return "正の数";
            else if (n < 0) return "負の数";
            else return "ゼロ";
        };
        System.out.println(judge.apply(-5));
    }
}

▼ 実行結果:


2倍の値:20
こんにちは、太郎さん!
負の数

6. returnの注意点とエラー例

6. returnの注意点とエラー例
6. returnの注意点とエラー例

Javaのラムダ式でreturnを使う際には以下の点に注意が必要です。

  • returnを書くときは必ず{}のブロックで囲む
  • 戻り値があるインタフェースでreturnを書かないとコンパイルエラー
  • 戻り値がない(void)インタフェースでreturnを書くとエラーになることも

初心者のうちは、returnの有無と戻り値の有無を明確に意識するようにしましょう。

7. よく使われる戻り値付き関数型インタフェース

7. よく使われる戻り値付き関数型インタフェース
7. よく使われる戻り値付き関数型インタフェース

Javaで戻り値を返すラムダ式を書く際には、以下のインタフェースを覚えておくと便利です。

  • Function<T, R>:1つの引数を受け取り、結果を返す
  • BiFunction<T, U, R>:2つの引数を受け取り、結果を返す
  • Predicate<T>:引数を受け取り、true/falseを返す
  • UnaryOperator<T>:引数と戻り値が同じ型の関数

一方、戻り値がない場合は以下のインタフェースを使用します。

  • Consumer<T>:引数を受け取り、何も返さない
  • Runnable:引数も戻り値もなし

まとめ

まとめ
まとめ

Javaのラムダ式は、関数型インタフェースに合わせて実装を書くのが大前提です。本記事の要点は「戻り値があるか」「void(戻り値なし)か」、そして本体が「一行の式か」「複数行のブロックか」を見分け、returnの有無を正しく選ぶことでした。

コア原則: 一行のreturn省略可/複数行のブロック{}return必須。
キーワード:Java ラムダ式・戻り値・void・return・Function・Predicate・Consumer・Runnable・ストリームAPI

戻り値ありの代表は FunctionBiFunctionPredicateUnaryOperator。入力から結果を返す役で、データの変換・集約・真偽判定を簡潔に表現できます。戻り値なし(void)の代表は ConsumerRunnable。表示・記録・通知などの副作用を担い、途中で止めたいときはreturn;で処理のみ終了します(値は返さない)。

戻り値あり(変換・判定)
  • Function<T,R>:ひとつ渡してひとつ返す(例:文字列→長さ
  • BiFunction<T,U,R>:二つ渡して一つ返す(例:合計・結合
  • Predicate<T>:真偽判定(例:空かどうか
  • UnaryOperator<T>:同型で整形(例:trim・大文字化
戻り値なし(出力・記録)
  • Consumer<T>:受け取って処理(例:ログ出力
  • Runnable:引数も戻り値もなし(例:前後処理
  • ※ 値を返す return 値; は書かない。打ち切りは return;

すぐ試せるサンプル(戻り値とvoidの使い分け)

変換=Function、判定=Predicate、出力=Consumer。短い処理は一行で、少し複雑ならブロック+returnにしましょう。


import java.util.*;
import java.util.function.*;
import java.util.stream.*;

public class SummarySample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("  apple", "", "Banana  ", "  ", "Cherry");

        // 変換(戻り値あり):空白を取り大文字化
        Function<String, String> normalize = s -> {
            if (s == null) return "";
            return s.trim().toUpperCase(); // ブロックなのでreturn必須
        };

        // 判定(戻り値あり=boolean):空を除外
        Predicate<String> nonBlank = s -> !s.isBlank(); // 一行なのでreturn省略

        // 出力(戻り値なし):長さを表示
        Consumer<Integer> printLen = n -> System.out.println("長さ:" + n);

        list.stream()
            .map(normalize)              // Functionで変換
            .filter(nonBlank)            // Predicateで絞り込み
            .map(String::length)         // 長さへ変換
            .forEach(printLen);          // Consumerで出力
    }
}
実装を安定させるチェックリスト
  • 一行のreturn省略、複数行ブロック{}return
  • 分岐は全経路で値を返す(未到達・未返却を作らない)。
  • voidのラムダでは値を返さない(必要ならreturn;で終了のみ)。
  • 型(Function<T,R>Predicate<T>Consumer<T>)から設計を逆算。
  • 短いものは式、複雑なものはブロックに分け、読みやすさを優先。

用語ミニ辞典(検索キーワードの理解に)

ラムダ式: 短い関数表現。「引数」→「本体」の形で書く。
関数型インタフェース: 抽象メソッドが一つ。ラムダ式の受け皿。
戻り値: 処理結果として呼び出し元に返す値。
void: 何も返さない型。表示・記録・通知に向く。
return: 処理の終了と返却を示す。ブロックでは明示が必要。

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

生徒

で書けるときはreturnいらなくて、ブロックならreturnが必要、まずはここを守れば良さそうですね。」

先生

「その調子。さらに、関数型インタフェースが戻り値の型を決めるから、Functionなら『何を返すか』を先に決めると迷いません。」

生徒

Predicateは真偽、Consumerは出力、Runnableは実行だけ。用途が分かれているからストリームの読み書きもすっきりしますね。」

先生

「うん。短い処理は一行の式、少し複雑ならブロック+return。このリズムで書けば、Javaのラムダ式・戻り値・void・returnの使い分けは自然と身につきますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Javaのラムダ式はどんなときに使うのが基本ですか?戻り値やvoidやreturnの違いは実務でどう役立ちますか?

ラムダ式は短い処理を簡潔に書くための書き方で、データ変換や条件判定や出力処理に向きます。戻り値を返す場合はFunctionやPredicateなどを使い、値を返さない副作用中心の処理はConsumerやRunnableを使います。式が一行ならreturn省略、複数行ならブロックとreturnが必要という基本を守ると読みやすく安全になります。

関数型インタフェースとは何ですか?ラムダ式と戻り値の型との関係を初学者向けに教えてください。

関数型インタフェースは抽象メソッドがひとつだけの特別なインタフェースで、ラムダ式の受け皿です。戻り値の型はインタフェース側で決まり、たとえばFunctionは結果を返し、Predicateは真偽値を返します。つまりどの型を返すかは最初から決まっているので、その型に合わせて式やブロックを書けば迷いません。
この記事が含まれる講座
カテゴリの一覧へ
新着記事
New1
Thymeleaf
Thymeleafの#mapsユーティリティとは?初心者向けマップ操作ガイド
更新記事
New2
Thymeleaf
Thymeleafの#arraysユーティリティとは?初心者向け配列操作ガイド
更新記事
New3
Thymeleaf
Thymeleafの#strings.sizeメソッドとは?初心者向け文字列の長さ取得ガイド
更新記事
New4
Thymeleaf
Thymeleafの#datesユーティリティとは?初心者向け日付操作ガイド
更新記事
人気記事
No.1
Java&Spring記事人気No1
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.2
Java&Spring記事人気No2
Java
Javaのクラスとインスタンス化、コンストラクタの使い方完全ガイド!初心者でもわかるオブジェクト指向の基礎
No.3
Java&Spring記事人気No3
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.4
Java&Spring記事人気No4
Java
JavaのDateクラスの使い方を完全ガイド!初心者でもわかる日付操作
No.5
Java&Spring記事人気No5
Java
JavaのExceptionクラスを完全解説!初心者でも理解できる例外処理の基本
No.6
Java&Spring記事人気No6
Java
Java開発環境「Eclipse(Pleiades)」のインストール方法とメリットを初心者向けに解説
No.7
Java&Spring記事人気No7
Thymeleaf
Thymeleafのth:hrefの使い方を全解説。初心者でも完璧に理解できるガイド
No.8
Java&Spring記事人気No8
Thymeleaf
Thymeleafのth:valueの使い方を解説!フォーム入力値を保持したり動的に表示する方法