1. 導入:なぜプリミティブ型ストリームが重要なのか
JavaのStream APIを使い始めた初心者の方がよく直面するのが、「List
2. 基礎知識:プリミティブ型ストリームとは
通常のStream
- IntStream: int型を扱う
- LongStream: long型を扱う
- DoubleStream: double型を扱う
これらは、数値計算(合計、平均、最大値の取得など)に特化した便利なメソッドが豊富に用意されているのが特徴です。
3. 実装/解決策:数値変換と集計のテクニック
Listからプリミティブ型ストリームへ変換するには、mapToIntなどのメソッドを使用します。これにより、単なるリスト操作が、数学的な計算を伴う効率的なパイプライン処理へと進化します。
4. サンプルプログラム:実践的なコード例
以下のコードをコピーして、IDEやオンラインコンパイラで実行してみてください。
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
public class PrimitiveStreamSample {
public static void main(String[] args) {
List numbers = Arrays.asList(1, 2, 3, 4, 5);
// 1. ListからIntStreamへ変換して合計を計算
int sum = numbers.stream()
.mapToInt(Integer::intValue) // Integerをintに変換
.sum();
System.out.println("合計値: " + sum);
// 2. 0から9までの連続した数値を生成して偶数だけ抽出
System.out.print("偶数のリスト: ");
IntStream.range(0, 10)
.filter(n -> n % 2 == 0)
.forEach(n -> System.out.print(n + " "));
// 3. 統計情報の取得(平均、最大、最小などが一度に取れる)
System.out.println("\n--- 統計情報 ---");
var stats = IntStream.of(10, 20, 30, 40, 50).summaryStatistics();
System.out.println("平均値: " + stats.getAverage());
System.out.println("最大値: " + stats.getMax());
}
}
5. 応用・注意点:現場で役立つポイント
現場でよくある失敗として、「ストリームの型を意識せずに無限ループを書いてしまう」ことがあります。IntStream.iterate(0, n -> n + 1)のような生成メソッドを使う際は、必ずlimit()で上限を設けるようにしてください。
また、DoubleStreamを使用する際は、浮動小数点数の計算誤差(0.1 + 0.2 != 0.3となる問題など)に注意が必要です。厳密な金額計算などを行う場合は、BigDecimalクラスと組み合わせるなどの工夫を検討してください。これらを使いこなせれば、あなたのJavaコードはより洗練され、パフォーマンスの高いものになるはずです。

コメント