前回まで、7回に渡ってストリームの機能について紹介してきました。

 ところで、筆者はこれまで何度もProject Lambdaについての講演やハンズオンを行ってきました。そこで、よく言われるのが、「頭では分かっているけど、いざ書こうとすると書けない」、であるとか「APIは分かっていても、どこから書き始めればいいか分からない」ということです。

 そこで、今回はStream APIのまとめとして、いくつかの例題をとりあげ、以前の書き方からストリームを使った書き方に変換していくということをやってみたいと思います。

サンプルのプロジェクト(こちらからダウンロードできます)
LambdaStreamDemo1.zip

 まず題材となるクラスをあげておきましょう。顧客を表すCustomerクラスです(リスト1)。

 

リスト1 Customerクラス

public class Customer {
    // 顧客のグレードを表すenum
    public enum Grade { S, A, B }

    // 名前
    private String name;
    // 取引額
    private long transactionValue;
    // 顧客のグレード
    private Grade grade;
    
    public Customer(String name, long transactionValue, Grade grade) {
        this.name = name;
        this.transactionValue = transactionValue;
        this.grade = grade;
    }

    public String getName() {
        return name;
    }
    
    public long getTransactionValue() {
        return transactionValue;
    }
    
    public void setGrade(Grade grade) {
        this.grade = grade;
    }
    
    public Grade getGrade() {
        return grade;
    }
    
    public String toString() {
        return new StringJoiner(", ", "[", "]").add(name).add(grade.toString()).add(Long.toString(transactionValue)).toString();
    }
}

 

 Customerクラスはフィールドとして、名前、取引額、グレードを定義してあり、getterを定義しているだけの単純なクラスです。

 では、このクラスを使用して、今までのfor文からストリームに変換していきましょう。