12月17日(木)1、2コマ目
今日、やったこと
ストリームAPI(特に終端操作)
今日のホワイトボード
ラムダ式で使える変数
引数やローカル変数(ラムダ式が長くなるため使いたくない)は当然OKですが、ラムダ式の外で宣言された変数も実質finalならアクセス可能です。
|
| 図 ラムダ式からラムダ式の外で宣言した変数にアクセス |
中間操作のfilter()で複数条件のorを行いたい
filter()の引数はPredicate<T>です。このPredicate<T>にはor(Predicate<T>)メソッドがあります。or()メソッドは2つのPredicateインスタンスのorを行うPredicateのインスタンスを返します。
|
| 図 filter()で複数条件のorを使う |
例 地域名が中国 か 四国
[or()を使わない]
PrefectureDAO.findAll()
.stream()
.filter( p->p.getArea().equals("中国") || p.getArea().equals("四国") )
・・
[or()を使う]
// まずは中国地方で検索用Predicate生成
Predicate<Prefecture> pred = p->p.getArea().equals("中国");
// or()メソッドで 中国地方検索用Predicate || 九州地方検索用Predicate生成
pred = pred.or(p->p.getArea().equals("九州"));
PrefectureDAO.findAll()
.stream()
.filter( pred )
・・
終端操作collect()
終端操作のなかでももっともオールマイティ。そのため、引数のCollectorを一から生成するのは複雑すぎてめんどくさい。
そこで、Collectorsクラス。このクラスには使いそうなcollectorを生成するメソッドがいろいろと用意されている。
|
| 図 終端操作collect()とその引数 |
Collectors.groupingBy()
ストリームを引数で指定した項目に注目してグループ化。
戻り値はMap。キーはグループ化のさいに注目した値。要素はList。
|
| 図 Collectors.groupingBy() |
今日の課題
一応正解例をあげときます。
前回から続く「ストリームAPI 演習その1」の正解例です。
今日配布した「ストリームAPI 演習その2」の正解例です。
次回は
2回分(4コマ)で評価用課題をやってもらいます。




コメント