Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのStream APIフィルターを使ってリストの合計値を求める方法

Javaでは、Stream APIのfilterメソッドを利用することで、条件に合致する要素だけを抽出し、その合計値を簡潔なコードで求めることができます。本記事では、実際のサンプルコードと実行結果をもとに、その実装方法と内部処理の流れをわかりやすく解説します。

サンプルコード

import java.util.*;
public class Demo
{
    public static void main(String[] args)
    {
        List<Integer> my_list = new ArrayList<Integer>();
        my_list.add(11);
        my_list.add(35);
        my_list.add(56);
        my_list.add(78);
        my_list.add(91);
        System.out.println(sum(my_list));
    }
    public static int sum(List<Integer> my_list)
    {
        System.out.println("main関数内で、フィルター適用後のリストの合計は ");
        return my_list.stream().filter(i -> i > 5).mapToInt(i -> i).sum();
    }
}

実行結果

main関数内で、フィルター適用後のリストの合計は 
271

コードの解説

このプログラムでは、まず「Demo」という名前のクラスが定義され、その中のmainメソッドでArrayListが生成されます。続いて、add()メソッドを使って整数値(11、35、56、78、91)がリストへ順番に追加されます。

合計値の算出は、別途定義されたsumメソッドが担当しています。このメソッド内では、次の3つのステップで処理が行われます。

  • stream(): リストからストリームを生成します。
  • filter(i -> i > 5): ラムダ式で指定した条件「5より大きい」を満たす要素のみを抽出します。今回の例ではすべての要素が該当します。
  • mapToInt(i -> i).sum(): 各要素をint型に変換(アンボクシング)し、sum()メソッドで合計値を計算して返します。

その結果、11 + 35 + 56 + 78 + 91 = 271 という合計値が画面に出力されます。

mapToIntを使うメリット

mapToIntを使用すると、オブジェクト型のStream<Integer>をプリミティブ型のIntStreamに変換できます。これにより、ボクシング・アンボクシングによるオーバーヘッドを抑えながら、効率的に数値の集計処理を実行できるのが大きな利点です。条件付きの合計だけでなく、average()max()など他の集計操作にも応用できます。

  1. EclipseでJavaFXをセットアップする方法|Maven依存関係とJARの手動追加を解説

    EclipseでJavaFXアプリケーションを開発するためには、あらかじめ環境構築が必要です。この記事では、Maven依存関係を利用する方法と、必要なJARファイルを手動で追加する方法という2つのアプローチをわかりやすく解説します。事前準備セットアップを始める前に、お使いのシステムにEclipseとJava(JDK)が正常にインストールされていることを確認してください。これらが揃っていれば、どちらの方法でもスムーズにJavaFX環境を構築できます。方法1:Maven依存関係を使ったセットアップMavenを利用してJavaFX環境を構築する場合は、まずEclipseで通常のJavaプロジェクトを

  2. Java 8 Streamsチュートリアル – コード例で学ぶStream APIの基本と使い方

    この記事では、Java 8のStreams(ストリーム)機能について詳しく解説し、さまざまなコード例を交えながらその使い方を紹介します。 Java StreamsはJavaに関数型プログラミングをもたらす強力な機能です。Java 8から導入されたため、それ以前のバージョンを使用している場合は、Java 8以降へのアップグレードが必要です。 なぜJava Streamsを使うべきなのか? Streamsには以下のようなメリットがあります。 少ないコード量で多くを実現できる — ごくわずかな行数のコードで、従来は多くの記述が必要だった処理を簡潔に実装できます。 ラムダ式を活用できる — 使い捨て