今回も前回同様、従来の書き方からストリームに変換していく過程を紹介していきます。
前回は主にfilterメソッド、mapメソッド、forEachメソッド、collectメソッドの4種類のメソッドを使用しましたが、今回はそれに加えflatMapメソッドを使っていきます。
また、collectメソッドで、標準では提供されていない機能を独自のCollectorインタフェースの実装クラスを作成してみます。
LambdaStreamDemo2.zip
今回も、前回同様、顧客を表すCustomerクラスを使用しましょう。Customerクラスは名前、取引額、グレードを保持するクラスです。それぞれgetNameメソッド、getTransactionValueメソッド、getGradeメソッドで取得できます。
今回はCustomerクラスに加えて、営業担当者を表すSalesPersonクラスをします。SalesPersonクラスは名前、担当エリア、担当顧客を保持しているとします。リスト1にSalesPersonクラスを示しました。
リスト1 SalesPersonクラス
public class SalesPerson {
// 名前
private String name;
// 担当エリア
private String area;
// 担当顧客
private List<Customer> customers;
public SalesPerson(String name, String area, Customer... initialCustomer) {
this.name = name;
this.area = area;
customers = new ArrayList<>();
Collections.addAll(customers, initialCustomer);
}
public String getName() {
return name;
}
public String getArea() {
return area;
}
public List<Customer> getCustomers() {
return customers;
}
public String toString() {
return new StringJoiner(", ", "[", "]").add(name).add(area).add(customers.toString()).toString();
}
}