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()など他の集計操作にも応用できます。
-
EclipseでJavaFXをセットアップする方法|Maven依存関係とJARの手動追加を解説
EclipseでJavaFXアプリケーションを開発するためには、あらかじめ環境構築が必要です。この記事では、Maven依存関係を利用する方法と、必要なJARファイルを手動で追加する方法という2つのアプローチをわかりやすく解説します。事前準備セットアップを始める前に、お使いのシステムにEclipseとJava(JDK)が正常にインストールされていることを確認してください。これらが揃っていれば、どちらの方法でもスムーズにJavaFX環境を構築できます。方法1:Maven依存関係を使ったセットアップMavenを利用してJavaFX環境を構築する場合は、まずEclipseで通常のJavaプロジェクトを
-
Java 8 Streamsチュートリアル – コード例で学ぶStream APIの基本と使い方
この記事では、Java 8のStreams(ストリーム)機能について詳しく解説し、さまざまなコード例を交えながらその使い方を紹介します。 Java StreamsはJavaに関数型プログラミングをもたらす強力な機能です。Java 8から導入されたため、それ以前のバージョンを使用している場合は、Java 8以降へのアップグレードが必要です。 なぜJava Streamsを使うべきなのか? Streamsには以下のようなメリットがあります。 少ないコード量で多くを実現できる — ごくわずかな行数のコードで、従来は多くの記述が必要だった処理を簡潔に実装できます。 ラムダ式を活用できる — 使い捨て