Java Stream APIで数値を合計する(IntStream)

JavaのStream APIで数値を合計するサンプルです。IntStreamを使用します。

目次

サンプル IntStreamとは
  指定した値を合計する(ofでストリーム生成)
  指定した値を合計する(rangeClosedでストリーム生成)
  指定した値を合計する(iterate+limit)
平均/最大値/最小値
  配列の値を合計する
ストリームを連結する(concat)
  Stream(リスト)からIntStream(数値)に変換(mapToInt)
  IntStream(数値)からStream(リスト)に変換(boxed)

IntStreamとは

コレクションでストリームを使用する

リストなどのコレクションの場合は、streamを使用します。
Java Stream APIでリストを操作する(stream)

指定した値を合計する(ofでストリーム生成)

  int a = IntStream.of(2,1,3).sum();

  System.out.println(a); // 6 (2+1+3)

3つの数値の合計を出力しています。
ofは、指定した引数の数値のストリームを生成できます。

指定した値を合計する(rangeClosedでストリーム生成)

  int a = IntStream.rangeClosed(1,3).sum();

  System.out.println(a); // 6 (1+2+3)

rangeCloseは、1つめの引数から2つめの引数までの数値のストリームを生成します。

指定した値を合計する(iterate+limit)

  int num1 = IntStream.iterate(2,a->a+2)
    .limit(3)
    .sum();
  System.out.println(num1); // 12 (2+4+6)

1行目は、2から始まり、2ずつ増加したストリームを生成します。
2行目のlimitが3なので、2と4と6になります。

平均/最大値/最小値

  int[] a = {2,4,6};
	        
  System.out.println(IntStream.of(a).average()); //4.0
		        
  System.out.println(IntStream.of(a).max()); //6
		  
  System.out.println(IntStream.of(a).min()); //2

 

配列の値を合計する

  int[] a = {2,1,3};
        
  System.out.println(IntStream.of(a).sum()); //6 (2+1+3)
        
  System.out.println(Arrays.stream(a).sum()); //6 (2+1+3)

3つの値の合計を出力します。
配列はArrays.streamでも可能です。

ストリームを連結する(concat)

  IntStream is1 = IntStream.of(1,2,3);
  IntStream is2 = IntStream.of(4,5,6);
		  
  IntStream is3 = IntStream.concat(is1, is2);
		  
  is3.forEach(System.out::println); //1 2 3 4 5 6

concatはストリームを連結します。

Stream(リスト)からIntStream(数値)に変換(mapToInt)

  List<Integer> num1 = new ArrayList<>(Arrays.asList(1, 2, 3));
  Stream<Integer> st1 = num1.stream();
		
  IntStream is1 = st1.mapToInt(b -> b);
		
  System.out.println(is1.sum()); //6 (1+2+3)

2行目は、Streamを生成しています。
4行目は、mapToIntメソッドでStreamからIntStreamに変換しています。
6行目のsumで合計を出しています。

IntStream(数値)からStream(リスト)に変換(boxed)

  IntStream is1 = IntStream.of(2,1,3); //ストリームを生成

  Stream<Integer> st1 = is1.boxed();

  System.out.println(
    st1.map(c -> c + "です").collect(Collectors.toList()));
    //[2です, 1です, 3です]

1行目は、IntStreamを生成しています。
3行目は、boxedメソッドでIntStreamからStreamに変換しています。
6行目は、値を加工してリストを出力しています。

関連の記事

Java ラムダ式のサンプル
Java ラムダ式で関数型インターフェースを使用
Java Stream APIでリストを操作する(stream)
Java 匿名クラスのサンプル

△上に戻る