SlideShare a Scribd company logo
1 of 43
Java8新機能
ラムダ式とストリーム
API
2016年3月度定例会
張田浩明 全43枚
1
目次
• 本日のテーマ
• ラムダ式とは?StreamAPIとは?
• ラムダ式基礎
• ラムダ式使用例
• ストリームAPIの基礎
• ストリームAPIの使用例
• メリットは?
• まとめ
• 質疑応答
2
目次
• 本日のテーマ
• ラムダ式とは?StreamAPIとは?
• ラムダ式基礎
• ラムダ式使用例
• ストリームAPIの基礎
• ストリームAPIの使用例
• メリットは?
• まとめ
• 質疑応答
3
Java8使うならJava8らしく描こうよ!!
4
目次
• 本日のテーマ
• ラムダ式とは?StreamAPIとは?
• ラムダ式基礎
• ラムダ式使用例
• ストリームAPIの基礎
• ストリームAPIの使用例
• メリットは?
• まとめ
• 質疑応答
5
ラムダ式とストリームAPI
 ラムダ式とは関数を簡便に表現するための記法。
 ストリームAPIは、ラムダ式を利用したコレクション操作用の
API
6
7
1. フルーツの一覧の中から
2. 名前が”りんご“で始まり
3. 値段が100円以上のものを、
4. 値段順で並び替えたものを
5. 名前だけ取り出して、
6. リスト作成する
簡単なサンプル
目次
• 本日のテーマ
• ラムダ式とは?StreamAPIとは?
• ラムダ式基礎
• ラムダ式使用例
• ストリームAPIの基礎
• ストリームAPIの使用例
• メリットは?
• まとめ
• 質疑応答
8
9
なぜラムダ式が必要になったのか
• 並列処理が当たり前に使われるようになり、ラムダ
式の必要性が高まった。
Microsoftの提案を受け入れていれば、ラムダ式が
もっと早く入っていたかもしれない。。
10
目次
• 本日のテーマ
• ラムダ式とは?StreamAPIとは?
• ラムダ式基礎
• ラムダ式使用例
• ストリームAPIの基礎
• ストリームAPIの使用例
• メリットは?
• まとめ
• 質疑応答
11
ラムダ式使用例
• リストの中身を1つずつ取り出して処理するためforEachというメソッ
ドが
追加されている。
• list.forEach(中身を1つずつ取り出してそれぞれに対してした
いこと );
• 「リストの中身を1つずつ取り出してそれぞれに対してしたいこと」を、
Javaのコードとしてどう書くのか?
• forEach メソッドのシグネチャを見てみると、Consumer クラスを引
数に取るらしい。 12
ラムダ式使用例
• Consumerクラスの実装はこんな感じ
13
ラムダ式使用例
• つまり forEach メソッドを使って、リストの中身を1つず
つ取り出して出力したいとなると、下記のような
Consumer オブジェクトを引数に渡す必要がある。
14
15
『なにこれJavaうざい。。
めんどくさい』
とモダンな方々なら思うよね絶対
16
ここでラムダ式の出番!!!
17
ここでラムダ式の出番!!!
そもそもラムダ式ってなんだ??
ラムダ式とは、
• 関数を第一級オブジェクトとして扱えるようにしたもの
• JVMで関数を直接扱えるようになったわけではなく、内
部的にはクラスのインスタンスを使って表現している。
• ラムダ式で記述すると自動的に並列処理化される!
18
ラムダ式使用例
19
アロー演算子
(ハイフン( - ) +大なり( > ))
ラムダ式書き方
(引数) -> 引数に対して行いたい処理
___________________________________________________________________________________________________
//引数が一つ
(x) -> x * x
x -> x <= 10
________________________________________________
//引数が二つ
( int x , int y )-> {
return x + y;
}
( x , y ) -> x + y 20
メソッドとして考えれば
イメージ湧きやすい!!!
使い方:メソッド参照
• ラムダ式だけでなく、既存のメソッドも関数型インタフェースで受け取ることが可能。
//ラムダ式を使った場合
list.forEach(x -> System.out.println(x));
//メソッド参照を使った場合
list.forEach(System.out :: println);
21
//複数行処理も可能
list.forEach(x -> {
System.out.println(x);
System.out.println(x);
});
目次
• 本日のテーマ
• ラムダ式とは?StreamAPIとは?
• ラムダ式基礎
• ラムダ式使用例
• ストリームAPIの基礎
• ストリームAPIの使用例
• メリットは?
• まとめ
• 質疑応答
22
ストリームAPIとは
• パイプライン型のデータ処理のAPI
• 絞り込み、データ変換、グループ化、集計など
の操作をそれぞれ分離した形で記述できる。
• 絞り込みの条件や、加工方法などをラムダ式で指定
する。
• メソッドチェーン形式で記述できる。
• Listや配列などの集合要素に対して、逐次的もしくは並
行的に処理を提供するクラス
23
ストリームパイプライン
• 処理をメソッドチェーンで記述する
• ソース ( Source )
• 中間操作 ( Intermediate Operation )
• 終端操作 ( Terminal Operation )
• ストリームパイプラインは、1つ以上のソース、0個以上の
中間操作、1つの終端操作から構成される。
• 終端操作の結果をソースとして処理を継続させることも
可能。
(終端操作の後にメソッドチェイン可能) 24
サンプル
25
1行目がソース
2~5行目までが中間操作
6行目が終端操作
ストリームパイプラインの挙動
26
ソース
• 既存のデータからStream型のオブジェクトを作る。
• Streamの種類
Stream<T>
IntStream , LongStream , DoubleStream
• つくりかた
Collection.stream()
Arrays.stream()
Stream.of(Object…)
27
bufferReader.lines()
IntStream.range(int,int)
中間操作
• 絞り込みや写像などの操作を指定して、新しいStreamを返
す。
• 遅延実行
処理方法を指定するだけで、実際には処理しない。
中間操作を呼び出すたびにループしてたら効率が悪い。
終端操作が呼ばれた時に、複数の中間操作をまとめてルー
プ処理
• 処理の種類
・絞り込み : filter
・オブジェクト変換 : map,flatMap
・並び替え : sorted 28
・数の制御 : limit , skip
・同一要素除外 : distinct
Etc…
終端操作
• ストリームパイプラインを実行して、何らかの結果を取得する処
理。
forEachだけは戻り値を返さない。
• 処理の種類
• 畳み込み : collect , reduce
• 集計: min , max , average , sum , count
• 単一の値の取得: findFirst , findAny
• 要素の検証: allMatch , anyMatch , noneMatch
• 繰り返し: forEach , forEachOrdered 29
Etc…
目次
• 本日のテーマ
• ラムダ式とは?StreamAPIとは?
• ラムダ式基礎
• ラムダ式使用例
• ストリームAPIの基礎
• ストリームAPIの使用例
• メリットは?
• まとめ
• 質疑応答
30
中間操作使用方法 : filter, map
31
• Filter
• Map
__________________________
_________________________
//結果 : 300
400
500
//結果 : ”100”
”200”
“300”
“400”
“500”
中間操作使用方法 : distinct, sored
32
• Distinct
_____________
• Sorted
__________
※ List#sortメソッドが追加されている為、Streamに変換しなくても
ソートすることは可能
※ .reverse()を追加することで降順でソートが可能になる。
//結果 : 100
200
300
//結果 : 100
200
300
400
500
終端操作使用方法 :anyMatch
33
• AnyMatch, AllMatch, NoneMatch
___________________________________________
結果 : b = true;
ショートカットサーキット評価の終
端操作
• 例えば、Stream#countは全要素をループで回す
ので時間がかかるが、Stream#findAnyはショート
サーキット評価なので,1つ目の要素が見つかれば
すぐに終わる。
34
終端操作使用方法 :collect
35
• ToList
_______________________________________________
目次
• 本日のテーマ
• ラムダ式とは?StreamAPIとは?
• ラムダ式基礎
• ラムダ式使用例
• ストリームAPIの基礎
• ストリームAPIの使用例
• メリットは?
• まとめ
• 質疑応答
36
メリット
パイプライン記述だから処理内容が見やすい
・保守性の向上
・可読性の向上
簡単に並列実行できるようになる。
->ラムダ式を用いることで自動的に並列処理
lists.stream().parallel() -> 使ったことないから詳しいこ
とは説明できません。。
37
保守性が向上する…?
処理の追加・削除・順番の入れ替えなどがやりやすい
再利用性やテスタビリティも向上するかも。
38
39
可読性は..?
• 野球選手の一覧から、チームごとの投手の平均年俸を取得する処理の例
• 気をつけないとすぐに読みにくくなる
• stream()とかstream()とかstream()とかノイズが多い。
目次
• 本日のテーマ
• ラムダ式とは?StreamAPIとは?
• ラムダ式基礎
• ラムダ式使用例
• ストリームAPIの基礎
• ストリームAPIの使用例
• メリットは?
• まとめ
• 質疑応答
40
まとめ
• ラムダ式
• 慣れたらラムダ式以外で書く術が考えられなくなる・・
• デメリットも少ないし使わない手はないよね
• ストリームAPI
• 慣れるまでは読み書きも難しいし、バグを生みやすいかもしれない。
• でも慣れると少ない記述で複雑な処理が実行できる。
そして何より書いていて楽しい!
(java7以前をバリバリ書いていた人なら絶対思っているはず。。)
• しかし、標準で用意されてる機能が少ない気がします。。。。。
• 今後は独自で拡張する輩が出てきてオレオレコードが拡散するか
も???
41
目次
• 本日のテーマ
• ラムダ式とは?StreamAPIとは?
• ラムダ式基礎
• ラムダ式使用例
• ストリームAPIの基礎
• ストリームAPIの使用例
• まとめ
• メリットは?
• 質疑応答
42
43
ご静聴ありがとうございました。

More Related Content

Similar to 3月度定例会プレゼン資料 張田浩明 最新

クラウド運用のためのストリームマイニング
クラウド運用のためのストリームマイニングクラウド運用のためのストリームマイニング
クラウド運用のためのストリームマイニングShin Matsumoto
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2Masatoshi Tada
 
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjavaきつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjavabitter_fox
 
Java concurrency in_practice_chap06
Java concurrency in_practice_chap06Java concurrency in_practice_chap06
Java concurrency in_practice_chap06ohtsuchi
 
Atc15_reading_networking_session
Atc15_reading_networking_sessionAtc15_reading_networking_session
Atc15_reading_networking_session紘也 金子
 
性能測定道 事始め編
性能測定道 事始め編性能測定道 事始め編
性能測定道 事始め編Yuto Hayamizu
 
Fundamentals of Relational Database Management Systems chapter19
Fundamentals of Relational Database Management Systems chapter19Fundamentals of Relational Database Management Systems chapter19
Fundamentals of Relational Database Management Systems chapter19Keisuke Suzuki
 
システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4shingo suzuki
 
システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4shingo suzuki
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングYosuke Mizutani
 
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会sakaik
 
States of Dolphin - MySQL最新技術情報2013秋 -
States of Dolphin - MySQL最新技術情報2013秋 -States of Dolphin - MySQL最新技術情報2013秋 -
States of Dolphin - MySQL最新技術情報2013秋 -yoyamasaki
 
研究生のためのC++ no.7
研究生のためのC++ no.7研究生のためのC++ no.7
研究生のためのC++ no.7Tomohiro Namba
 
Open棟梁と、さまざまな開発標準とのフィッティング案
Open棟梁と、さまざまな開発標準とのフィッティング案Open棟梁と、さまざまな開発標準とのフィッティング案
Open棟梁と、さまざまな開発標準とのフィッティング案Daisuke Nishino
 
ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014Koji Hasegawa
 
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
ネットワーク自動化ツール紹介(Ansible・NAPALM編)ネットワーク自動化ツール紹介(Ansible・NAPALM編)
ネットワーク自動化ツール紹介(Ansible・NAPALM編)akira6592
 

Similar to 3月度定例会プレゼン資料 張田浩明 最新 (20)

クラウド運用のためのストリームマイニング
クラウド運用のためのストリームマイニングクラウド運用のためのストリームマイニング
クラウド運用のためのストリームマイニング
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
 
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjavaきつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
 
Java concurrency in_practice_chap06
Java concurrency in_practice_chap06Java concurrency in_practice_chap06
Java concurrency in_practice_chap06
 
Atc15_reading_networking_session
Atc15_reading_networking_sessionAtc15_reading_networking_session
Atc15_reading_networking_session
 
Spring3.1概要x di
Spring3.1概要x diSpring3.1概要x di
Spring3.1概要x di
 
性能測定道 事始め編
性能測定道 事始め編性能測定道 事始め編
性能測定道 事始め編
 
Fundamentals of Relational Database Management Systems chapter19
Fundamentals of Relational Database Management Systems chapter19Fundamentals of Relational Database Management Systems chapter19
Fundamentals of Relational Database Management Systems chapter19
 
システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4
 
システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4システムパフォーマンス勉強会#4
システムパフォーマンス勉強会#4
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
 
States of Dolphin - MySQL最新技術情報2013秋 -
States of Dolphin - MySQL最新技術情報2013秋 -States of Dolphin - MySQL最新技術情報2013秋 -
States of Dolphin - MySQL最新技術情報2013秋 -
 
研究生のためのC++ no.7
研究生のためのC++ no.7研究生のためのC++ no.7
研究生のためのC++ no.7
 
Open棟梁と、さまざまな開発標準とのフィッティング案
Open棟梁と、さまざまな開発標準とのフィッティング案Open棟梁と、さまざまな開発標準とのフィッティング案
Open棟梁と、さまざまな開発標準とのフィッティング案
 
StreamGraph
StreamGraphStreamGraph
StreamGraph
 
ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014
 
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
ネットワーク自動化ツール紹介(Ansible・NAPALM編)ネットワーク自動化ツール紹介(Ansible・NAPALM編)
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
 
LDA入門
LDA入門LDA入門
LDA入門
 

Recently uploaded

JAPAN WEB3.0 AWARD 2023 ブロックチェーン(NFT)技術を活用したアイディア 優秀賞作品 遺3.0相続
JAPAN WEB3.0 AWARD 2023 ブロックチェーン(NFT)技術を活用したアイディア 優秀賞作品 遺3.0相続JAPAN WEB3.0 AWARD 2023 ブロックチェーン(NFT)技術を活用したアイディア 優秀賞作品 遺3.0相続
JAPAN WEB3.0 AWARD 2023 ブロックチェーン(NFT)技術を活用したアイディア 優秀賞作品 遺3.0相続Yusuke Katsuma
 
コダワリ抜いた経営指南書(概要版) - コダワリ・ビジネス・コンサルティング株式会社
コダワリ抜いた経営指南書(概要版) - コダワリ・ビジネス・コンサルティング株式会社コダワリ抜いた経営指南書(概要版) - コダワリ・ビジネス・コンサルティング株式会社
コダワリ抜いた経営指南書(概要版) - コダワリ・ビジネス・コンサルティング株式会社hmoriyama
 
第15回販促コンペ 審査員個人賞(林 知幸 氏) アルカナ? アディダスジャパン
第15回販促コンペ 審査員個人賞(林 知幸 氏) アルカナ? アディダスジャパン第15回販促コンペ 審査員個人賞(林 知幸 氏) アルカナ? アディダスジャパン
第15回販促コンペ 審査員個人賞(林 知幸 氏) アルカナ? アディダスジャパンYusuke Katsuma
 
答えのないコンセンサスゲーム「無人島での出来事」運営用パワーポイントスライド説明資料
答えのないコンセンサスゲーム「無人島での出来事」運営用パワーポイントスライド説明資料答えのないコンセンサスゲーム「無人島での出来事」運営用パワーポイントスライド説明資料
答えのないコンセンサスゲーム「無人島での出来事」運営用パワーポイントスライド説明資料Jun Chiba
 
HCCソフト株式会社 2025年新卒採用向け 会社紹介・採用情報資料------
HCCソフト株式会社 2025年新卒採用向け 会社紹介・採用情報資料------HCCソフト株式会社 2025年新卒採用向け 会社紹介・採用情報資料------
HCCソフト株式会社 2025年新卒採用向け 会社紹介・採用情報資料------ssusercbaf23
 
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店ssuserfb441f
 

Recently uploaded (8)

JAPAN WEB3.0 AWARD 2023 ブロックチェーン(NFT)技術を活用したアイディア 優秀賞作品 遺3.0相続
JAPAN WEB3.0 AWARD 2023 ブロックチェーン(NFT)技術を活用したアイディア 優秀賞作品 遺3.0相続JAPAN WEB3.0 AWARD 2023 ブロックチェーン(NFT)技術を活用したアイディア 優秀賞作品 遺3.0相続
JAPAN WEB3.0 AWARD 2023 ブロックチェーン(NFT)技術を活用したアイディア 優秀賞作品 遺3.0相続
 
company profile
company profilecompany profile
company profile
 
コダワリ抜いた経営指南書(概要版) - コダワリ・ビジネス・コンサルティング株式会社
コダワリ抜いた経営指南書(概要版) - コダワリ・ビジネス・コンサルティング株式会社コダワリ抜いた経営指南書(概要版) - コダワリ・ビジネス・コンサルティング株式会社
コダワリ抜いた経営指南書(概要版) - コダワリ・ビジネス・コンサルティング株式会社
 
第15回販促コンペ 審査員個人賞(林 知幸 氏) アルカナ? アディダスジャパン
第15回販促コンペ 審査員個人賞(林 知幸 氏) アルカナ? アディダスジャパン第15回販促コンペ 審査員個人賞(林 知幸 氏) アルカナ? アディダスジャパン
第15回販促コンペ 審査員個人賞(林 知幸 氏) アルカナ? アディダスジャパン
 
答えのないコンセンサスゲーム「無人島での出来事」運営用パワーポイントスライド説明資料
答えのないコンセンサスゲーム「無人島での出来事」運営用パワーポイントスライド説明資料答えのないコンセンサスゲーム「無人島での出来事」運営用パワーポイントスライド説明資料
答えのないコンセンサスゲーム「無人島での出来事」運営用パワーポイントスライド説明資料
 
HCCソフト株式会社 2025年新卒採用向け 会社紹介・採用情報資料------
HCCソフト株式会社 2025年新卒採用向け 会社紹介・採用情報資料------HCCソフト株式会社 2025年新卒採用向け 会社紹介・採用情報資料------
HCCソフト株式会社 2025年新卒採用向け 会社紹介・採用情報資料------
 
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店
株式会社MAVEL会社概要_アフィリエイト広告_運用型広告_LTVを予測しLOIを最適化する広告代理店
 
KestrelPro Flyer Japan IT Week 2024 (Japanese)
KestrelPro Flyer Japan IT Week 2024 (Japanese)KestrelPro Flyer Japan IT Week 2024 (Japanese)
KestrelPro Flyer Japan IT Week 2024 (Japanese)
 

3月度定例会プレゼン資料 張田浩明 最新

Editor's Notes

  1. パラダイムシフト -> 革命