Tips

イマサラ Java StreamAPIを使ってみよう!
2017.11.08

イマサラ Java StreamAPIを使ってみよう!

さて、今更ながらというか遅まきな感じですが、Java StreamAPIを使ってみようと思います。
前回のループあれこれから早半年(うそ)そろそろ私も大人になりました。
StreamAPIを使える力量を兼ね備えた!素敵なおじさんに!なったのではないかということで。。。

では、最初に1から10までの合計を。ちなみに和の公式では、10(10 + 1) / 2 という式になります。
10の部分を足し合わせたい数にすると1からの和が簡単に求まるよん!

まず、普通に書いてみます。sumとか使って。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package jp.pjin.tech.java;
 
import java.util.Arrays;
import java.util.List;
 
public class StreamSample2_1 {
    private static int sum = 0;
 
    public static void main(String[] args) {
        List<Integer> ar = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        ar.forEach(i -> sum += i);
        System.out.println(sum);
    }
}

なんかいい感じに微妙なサンプルになりましたが、まあ、あまり気にしないことにして、次行ってみましょう!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package jp.pjin.tech.java;
 
import java.util.Arrays;
import java.util.List;
import java.util.function.BinaryOperator;
 
public class StreamSample2_2 {
    public static void main(String[] args) {
        List<Integer> ar = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        BinaryOperator<Integer> plus = new BinaryOperator<Integer>() {
            @Override
            public Integer apply(Integer t, Integer u) {
                return t + u;
            }
        };
        int sum = ar.stream().map(val -> val).reduce(plus).orElse(0);
        System.out.println(sum);
    }
}

Streamを利用して、BinaryOperatorを利用し匿名クラスで書いた例がこれです。
BinaryOperatorは2項演算用のクラスです。(なに2項演算って。。。。。1+1みたいなものです)

さて続いて、匿名クラスではなくラムダで書くとどうなるか見てみましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package jp.pjin.tech.java;
 
import java.util.Arrays;
import java.util.List;
import java.util.function.BinaryOperator;
 
public class StreamSample2_3 {
    public static void main(String[] args) {
        List<Integer> ar = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        BinaryOperator<Integer> plus = (Integer t, Integer u) -> {
            return t + u;
        };
        int sum = ar.stream().map(v -> v).reduce(plus).orElse(0);
        System.out.println(sum);
    }
}

割合スッキリしてきましたね。もう少し省略してみましょう!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package jp.pjin.tech.java;
 
import java.util.Arrays;
import java.util.List;
import java.util.function.BinaryOperator;
 
public class StreamSample2_3 {
    public static void main(String[] args) {
        List<Integer> ar = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        BinaryOperator<Integer> plus = (t, u) -> t + u;
        int sum = ar.stream().map(v -> v).reduce(plus).orElse(0);
        System.out.println(sum);
    }
}

BinaryOperatorの部分がわけがわからなくなってきました。returnを省略したりブロック({})を省略するとなんだかなーという感じになったりしますが。。。。
最初のサンプルと比べてなんだか釈然としませんが、Streamでちょっと遊んでみました!

新連載はじまりました!新Java基礎 連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search