More Related Content
Similar to きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava (20)
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
- 2. 2
Who are you?
吉田真也(@bitter_fox, @shinyafox)
●
立命館大学 情報理工学部 情報システム学科
– 高性能計算機ソフトウェアシステム研究室
● 立命館コンピュータクラブ(RCC)
● http://www.rcc.ritsumei.ac.jp/
●
OpenJDKコミッタ
– Project Kulla
- 29. 29
filter[中間]
● filter(T -> boolean)
– フィルタリング
– 各要素を引数に適用しtrueを返したもののみ残す
– filterの引数には欲しい値の条件を書く
– s.filter(Objects::nonNull) // nullを除外
Stream<T>
IntStream
LongStream
DoubleStream
- 33. 33
map[中間操作]
● map(T -> R)
– 写像・変換
– 各要素を引数に適用した結果のStreamを作る
– personStream.map(p -> p.getName())
– seq.map(n -> n * 2)
Stream<T>
IntStream
LongStream
DoubleStream
- 39. 39
reduce[終端]
● Optional<T> reduce((T, T) -> T)
● T reduce(T, (T, T) -> T)
● U reduce(U, (U, T) -> U, (U, U) -> U)
– 集約
– s.reduce((n, m) -> n < m ? n : m)
● Optional
– 値が無いという状態を表すことができる
Stream<T>
IntStream
LongStream
DoubleStream
- 53. 53
sum[終端]
● int sum()
● long sum()
● double sum()
– 総和を求める
●
そのものズバリ
– s.sum()
Stream<T>
IntStream
LongStream
DoubleStream
- 57. 57
Ave, max, min[終端]
● average(), max(), min()
– Optional系を返す
– 平均,最大,最小値を求める
Stream<T>
IntStream
LongStream
DoubleStream
- 59. 59
Change the type of Stream
Sequential Stream
Parallel Stream
parallel() sequential()
- 68. 68
collect
● R collect(() -> R, (R, T) -> R, (R, R) -> void)
● R collect(Collector<T, ?, R>)
– 集約処理
– R:集約先のオブジェクト
– () -> R:集約先のオブジェクトの生成
– (R, T) -> R:集約先のオブジェクトRに要素Tを集約
– (R, R) -> void:集約先のオブジェクトR同士のcombine
●
並列処理用
- 74. flatMap
H e l l
H e l l o
H e l l o , W
H e l
Stream<R>Stream<T>
- 75. flatMap
● flatMap(T -> Stream<R>)
– 写像・変換 + 平坦化
– 平坦化されたStream<R>
– companieStream.flatMap(c → c.getList().stream())
- 93. 93
H e l o , W o r l d !
Map
parallel
groupingByConcurrent