JavaのStream APIで数値を合計するサンプルです。IntStreamを使用します。
目次
IntStreamとは
- 要素がint型のときに使用します。
- 配列や指定した値からストリームを生成し、そのストリームに対して処理します。
- 以下は、OracleのJava8のIntStreamインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/IntStream.html
コレクションでストリームを使用する
リストなどのコレクションの場合は、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 匿名クラスのサンプル