Submit Search
60分で体験する Stream / Lambda ハンズオン
4 likes
863 views
Hiroto Yamakawa
Java Doでしょう #01(8/23 札幌) http://javado.connpass.com/event/18278/
Engineering
Read more
1 of 31
Download now
Downloaded 12 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
More Related Content
PDF
Java SE 8 lambdaで変わる プログラミングスタイル
なおき きしだ
PPT
Awt and swing in java
Shehrevar Davierwala
PDF
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
bitter_fox
PDF
今こそStream API入門
Yuichi Sakuraba
PDF
Java 8 features
NexThoughts Technologies
PDF
Spring Boot
Pei-Tang Huang
PPTX
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
PDF
サーバーサイドでの非同期処理で色々やったよ
koji lin
Java SE 8 lambdaで変わる プログラミングスタイル
なおき きしだ
Awt and swing in java
Shehrevar Davierwala
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
bitter_fox
今こそStream API入門
Yuichi Sakuraba
Java 8 features
NexThoughts Technologies
Spring Boot
Pei-Tang Huang
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
サーバーサイドでの非同期処理で色々やったよ
koji lin
What's hot
(20)
PPTX
Spring Webflux
Carlos E. Salazar
PDF
Spring Boot
koppenolski
PDF
Java I/O
Jussi Pohjolainen
PPSX
Elements of Java Language
Hitesh-Java
PDF
例外設計における大罪
Takuto Wada
PDF
入社1年目のプログラミング初心者がSpringを学ぶための手引き
土岐 孝平
PDF
磯野ー!関数型言語やろうぜー!
Ra Zon
PPTX
Introduction to java
Java Lover
PDF
SpringBootTest入門
Yahoo!デベロッパーネットワーク
PPT
Ionic Framework
Thinh VoXuan
PDF
Mavenの真実とウソ
Yoshitaka Kawashima
PDF
Real Life Clean Architecture
Mattia Battiston
PPTX
Clean architecture
.NET Crowd
PDF
Spring Framework - Core
Dzmitry Naskou
PPTX
Chapter 3 servlet & jsp
Jafar Nesargi
PPT
Présentation jQuery pour débutant
Stanislas Chollet
PDF
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Scott Wlaschin
PDF
動的なILの生成と編集
terurou
PPTX
Introduction to Spring Framework
Serhat Can
PPT
試験にでるSpring
土岐 孝平
Spring Webflux
Carlos E. Salazar
Spring Boot
koppenolski
Java I/O
Jussi Pohjolainen
Elements of Java Language
Hitesh-Java
例外設計における大罪
Takuto Wada
入社1年目のプログラミング初心者がSpringを学ぶための手引き
土岐 孝平
磯野ー!関数型言語やろうぜー!
Ra Zon
Introduction to java
Java Lover
SpringBootTest入門
Yahoo!デベロッパーネットワーク
Ionic Framework
Thinh VoXuan
Mavenの真実とウソ
Yoshitaka Kawashima
Real Life Clean Architecture
Mattia Battiston
Clean architecture
.NET Crowd
Spring Framework - Core
Dzmitry Naskou
Chapter 3 servlet & jsp
Jafar Nesargi
Présentation jQuery pour débutant
Stanislas Chollet
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Scott Wlaschin
動的なILの生成と編集
terurou
Introduction to Spring Framework
Serhat Can
試験にでるSpring
土岐 孝平
Ad
Viewers also liked
(20)
PDF
Apache Wicket and Java EE sitting in a tree
Martijn Dashorst
PPT
Wicket体験談
Hiroto Yamakawa
PDF
RESUME
Allison Autrey
PDF
Java Community Process(JCP)ミーティング
関西Javaエンジニアの会
PDF
Apache Wicket: Web Applications With Just Java
Martijn Dashorst
PDF
逆戻りデバッグ補助のための嵌入的スパイの試作
Kamiya Toshihiro
PDF
chat bot framework for Java8
masahitojp
PDF
地方私立大の助教が Apache Wicketの勉強会を 開いたら
Hiroto Yamakawa
PDF
札幌のJavaコミュニティ Java Doを立ち上げた話
Hiroto Yamakawa
PDF
プログラミング言語に関する学生へのアンケート
Hiroto Yamakawa
PDF
Mautic導入ポイントと初期設定(Windows+Bitnami Mautic Stack)
Jun Katayama
PDF
WordPress でプロフィールサイトをつくってみた
reona396
PDF
Wicket with Spring Boot on Azure
Hiroto Yamakawa
PDF
Apache Wicketのユニットテスト機能
Hiroto Yamakawa
PDF
Lombok ハンズオン
Hiroto Yamakawa
PPTX
kintone アプリ & バーコード活用 & Excel 連携
Cybozucommunity
PDF
Review the OOCSS
Manabu Yasuda
PDF
20160215 04 java ee7徹底入門 jbatch
Jun Inose
PDF
The Zillow Zero Marketing Strategy
Mautic
PPTX
MA(マーケティングオートメーション)初心者運用のススメ
miyuki yamada
Apache Wicket and Java EE sitting in a tree
Martijn Dashorst
Wicket体験談
Hiroto Yamakawa
RESUME
Allison Autrey
Java Community Process(JCP)ミーティング
関西Javaエンジニアの会
Apache Wicket: Web Applications With Just Java
Martijn Dashorst
逆戻りデバッグ補助のための嵌入的スパイの試作
Kamiya Toshihiro
chat bot framework for Java8
masahitojp
地方私立大の助教が Apache Wicketの勉強会を 開いたら
Hiroto Yamakawa
札幌のJavaコミュニティ Java Doを立ち上げた話
Hiroto Yamakawa
プログラミング言語に関する学生へのアンケート
Hiroto Yamakawa
Mautic導入ポイントと初期設定(Windows+Bitnami Mautic Stack)
Jun Katayama
WordPress でプロフィールサイトをつくってみた
reona396
Wicket with Spring Boot on Azure
Hiroto Yamakawa
Apache Wicketのユニットテスト機能
Hiroto Yamakawa
Lombok ハンズオン
Hiroto Yamakawa
kintone アプリ & バーコード活用 & Excel 連携
Cybozucommunity
Review the OOCSS
Manabu Yasuda
20160215 04 java ee7徹底入門 jbatch
Jun Inose
The Zillow Zero Marketing Strategy
Mautic
MA(マーケティングオートメーション)初心者運用のススメ
miyuki yamada
Ad
Similar to 60分で体験する Stream / Lambda ハンズオン
(20)
PPTX
【java8 勉強会】 怖くない!ラムダ式, Stream API
dcomsolution
PDF
社内Java8勉強会 ラムダ式とストリームAPI
Akihiro Ikezoe
PDF
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
bitter_fox
PDF
The Why and How of Java8 at LINE Fukuoka
Youhei Nitta
PPTX
3月度定例会プレゼン資料 張田浩明 最新
hharita
PPTX
Project lambda
Appresso Engineering Team
PDF
ゆるふわJava8入門
dcubeio
PPTX
Java8勉強会
賢太郎 前多
PDF
Java8 lambdas chap03
ohtsuchi
PPTX
JavaDayTokyo2015 [3-1]
Kenji Kazumura
PPTX
Java8から始める関数型プログラミング
stylefreeslide
PPTX
Java8 Lambda chapter5
Takinami Kei
PDF
【社内勉強会#9】(今更ながら)java8触ってみた~ラムダ式篇~
目黒 のぞみ
ODP
Vim scriptとJavaとHaskell
aiya000
PDF
JavaのStreamで学ぶ遅延処理実装パターン
Shinya Mochida
PDF
Javaセキュアコーディングセミナー東京第3回講義
JPCERT Coordination Center
PDF
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
なおき きしだ
PDF
On stream-lazy-computation
Shinya Mochida
PDF
Java初心者がJava8のラムダ式をやってみた
Aya Ebata
PDF
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
tsudaa
【java8 勉強会】 怖くない!ラムダ式, Stream API
dcomsolution
社内Java8勉強会 ラムダ式とストリームAPI
Akihiro Ikezoe
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
bitter_fox
The Why and How of Java8 at LINE Fukuoka
Youhei Nitta
3月度定例会プレゼン資料 張田浩明 最新
hharita
Project lambda
Appresso Engineering Team
ゆるふわJava8入門
dcubeio
Java8勉強会
賢太郎 前多
Java8 lambdas chap03
ohtsuchi
JavaDayTokyo2015 [3-1]
Kenji Kazumura
Java8から始める関数型プログラミング
stylefreeslide
Java8 Lambda chapter5
Takinami Kei
【社内勉強会#9】(今更ながら)java8触ってみた~ラムダ式篇~
目黒 のぞみ
Vim scriptとJavaとHaskell
aiya000
JavaのStreamで学ぶ遅延処理実装パターン
Shinya Mochida
Javaセキュアコーディングセミナー東京第3回講義
JPCERT Coordination Center
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
なおき きしだ
On stream-lazy-computation
Shinya Mochida
Java初心者がJava8のラムダ式をやってみた
Aya Ebata
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
tsudaa
60分で体験する Stream / Lambda ハンズオン
1.
60分で体験する Stream / Lambda ハンズオン
2.
gishi_yama • 某地方大学でeラーニングなどの情報システムの 開発・研究に従事 • Wicket-Sapporo,
Java Do ← New! • Wicket User Guideの翻訳にチャレンジ中 https://github.com/wicket-sapporo/wicket_user_guide_jp
3.
ハンズオンの概要 Java 8のリリースから1年あまりが経過し、Stream APIやLambda 式が開発環境に導入される事例も次第 に増えてきていることと思います。 Stream
APIやLamda式のしくみ・書き方・ルールの 基本と、これらを用いて既存のJavaコードをどう変 化させることができるのか、体験してみましょう。 3
4.
練習・演習プロジェクト https://github.com/java-‐do/20150823_seminar 1. Download Zip
をして展開(もしくはgitでclone) 2. stream20150823 フォルダをインポート Eclipse:Existing Maven Project(既存のMavenプロジェクト) NetBeans:プロジェクトを開く 3. 指示に従ってHandsOn.javaを編集し、ファイルを実行する 4. 解答例は Answer.java に記載されている
5.
Stream / Lambda Javaに細かい並列処理を導入するため、Java8から導 入されたAPIや記法のこと •
Stream: 配列、List、Set、Mapといったコレクション的な オブジェクトへの順次・並列処理を記述するAPI • Lambda: 匿名の関数オブジェクトを作るための関数型イン ターフェースの実装(とその記法) 5
6.
6 ages 22 10
19 38 たとえば、配列を表示する ‣ ages を要素数分繰り返す ‣ iを要素番号として、agesから要素を取り出す ‣ 取り出した要素を表示する int[] ages = new int[]{22, 10, 19, 38}; for (int i = 0; i < ages.length; i++) { System.out.println(ages[i]); }
7.
7 ages 22 10
19 38 たとえば、配列を表示する Stream int[] ages = new int[]{22, 10, 19, 38}; Arrays.stream(ages) .forEach(n -‐> System.out.println(n)); ‣ agesをstreamにする ‣ streamの要素nをSystem.out.println(n)で表示する
8.
8 ‣ ages を要素数分繰り返す ‣
iを要素番号として、agesから要素を取り出す ‣ 取り出した要素を表示する ‣ agesをstreamにする ‣ streamの要素nをSystem.out.println(n)で表示する
9.
ages 22 10
19 38 たとえば、選んで表示する ‣ ages を要素数分繰り返す ‣ iを要素番号として、agesから要素:nを取り出す ‣ nが20以上の時だけ、下を実行する ‣ nを表示する ※20以上を表示 int[] ages = new int[]{22, 10, 19, 38}; for (int i = 0; i < ages.length; i++) { int n = ages[i]; if (n >= 20) { System.out.println(n); } }
10.
10 ages 22 10
19 38 たとえば、選んで表示する Stream ‣ argsをStreamにする ‣ streamの要素nが20以上のものだけにフィルタする ‣ 残った要素nを表示する ※20以上を表示 int[] ages = new int[]{22, 10, 19, 38}; Arrays.stream(ages) .filter(n -‐> n >= 20) // 22, 38のみのStreamができる .forEach(n -‐> System.out.println(n));
11.
11 ‣ ages を要素数分繰り返す ‣
iを要素番号として、agesから要素:nを取り出す ‣ nが20以上の時だけ、下を実行する ‣ nを表示する ‣ argsをStreamにする ‣ streamの要素nが20以上のものだけにフィルタする ‣ 残った要素nを表示する
12.
練習1を やってみましょう 12
13.
13 Streamの構造 int[] ages =
new int[]{22, 10, 19, 38}; Arrays.stream(ages) .filter(n -‐> n >= 20) .forEach(n -‐> System.out.println(n)); ‣ 終端操作が実行されるときに、パイプラインの全てが実行される ‣ それぞれにどのような種類があるのかは @hisidamaさんの http://www.ne.jp/asahi/hishidama/home/tech/java/ stream.html#h_method がわかりやすい ストリーム・パイプライン
14.
14 ages 22 10
19 38 並列処理 Stream ※20以上を表示 int[] ages = new int[]{22, 10, 19, 38}; Arrays.stream(ages) .parallel() .filter(n -‐> n >= 20) .forEach(n -‐> System.out.println(n)); streamをparallel streamに変化させるだけで、 並列処理になる ※順序保証だとパフォーマンスは下がる
15.
15 ages 22 10
19 38 要素の入れ替え Stream map、mapToXXというメソッドで、要素を入れ替えた Streamを生成し、処理を継続する Arrays.stream(ages) .filter(n -‐> n >= 20) // 22, 38のみのStreamができる .mapToObj(n -‐> Integer.toBinaryString(n)) // 2進数化したStreamができる .forEach(n -‐> System.out.println(n));
16.
16 Lambda式 ・n -‐> n
>= 20 ・n -‐> Integer.toBinaryString(n) ・n -‐> System.out.println(n) Streamの中に現れた これらが Lambda(ラムダ)式。 ラムダ式は、 式 の様に処理(関数)を書ける 「関数オブジェクト」 Javaでは、関数型インターフェースの無名クラスが原型
17.
無名クラス インスタンス化の際に{}をつけることで、サブクラスやインター フェースの実装クラスのオブジェクトをその場で作ることができる。 このサブクラスには、クラス名がない。 この手法(と、作られたクラス)を無名クラスという。 public class GamePlayer
extends AbstractPlayer { // AbstractPlayerのサブクラス // このサブクラスには GamePlayer というクラス名前がある } AbstractPlayer player = new AbstractPlayer() { // このオブジェクトは、AbstractPlayerのサブクラスのオブジェクトとなる // サブクラスにはクラス名が存在しないので、無名クラスと呼ばれる }; ↓通常のサブクラス↑無名クラス
18.
関数型インターフェース 18
19.
int[] ages =
new int[]{22, 10, 19, 38}; IntConsumer consumer = new IntConsumer() { // Consumerの無名クラス @Override public void accept(int n) { System.out.println(n); } }; Arrays.stream(ages) .forEach(consumer); 例:配列を表示する終端操作の Consumerの無名クラス
20.
int[] ages =
new int[]{22, 10, 19, 38}; IntConsumer consumer = new IntConsumer() { // Consumerの無名クラス @Override public void accept(int n) { System.out.println(n); } }; Arrays.stream(ages) .forEach(consumer); 無名クラスからラムダ式へ
21.
int[] ages =
new int[]{22, 10, 19, 38}; IntConsumer consumer = n -‐> System.out.println(n); Arrays.stream(ages) .forEach(consumer); ラムダ式
22.
int[] ages =
new int[]{22, 10, 19, 38}; IntConsumer consumer = n -‐> System.out.println(n); Arrays.stream(ages) .forEach(n -‐> System.out.println(n)); 引数に直接渡す
23.
アロー演算子の左辺が複数行 になるときは{}で囲む int[] ages =
new int[]{22, 10, 19, 38}; Arrays.stream(ages) .forEach(n -‐> { String s = n + "歳"; System.out.println(s); });
24.
練習2 演習1∼10を やってみましょう 24
25.
List<String> choiced =
profiles.stream() .filter(p -‐> p.isFamale()) .filter(p -‐> p.isAdult()) .map(p -‐> p.getName()) .forEach(i -‐> System.out.println(i)); List<String> choiced = profiles.stream() .filter(Profile::isFamale) .filter(Profile::isAdult) .map(Profile::getName) .forEach(System.out::println); メソッド参照 ラムダ式の部分を オブジェクト::メソッド名 クラス::メソッド名 に書き換えられる(引数も推測される)
26.
副作用は(極力)避ける StringJoiner joiner =
new StringJoiner(",", "Profile{", "}"); Stream.of(name, sex.toString(), age.toString(), state, policy) .forEach(joiner::add); StringJoiner joiner = new StringJoiner(",", "Profile{", "}"); Stream.of(name, sex.toString(), age.toString(), state, policy) .parallel() .forEach(joiner::add); joiner に変化(副作用)を与えるStream 上(順次処理)と下(並列処理)で結果が異なる! やむをえない場合もあるが、副作用のある処理は極力さけることで、 エラーの防止や並列化をしやすくなる ※なお、ラムダ式の名で呼び出される変数は暗黙的にfinalとなる (上の例では、joinerがfinalとして扱われる)
27.
まとめ 27
28.
まとめ Stream: コレクション的なオブジェクトへの順次・並列 処理をパイプラインで記述できる Lambda:
関数型インターフェースの実装(Stream内で 処理させたい内容など)を式やメソッド参照で書ける Stream API / Lambdaを使うことで、for文を使う処理 をより明確に・簡素に書ける streamをparallel化するだけで並列処理を行わせること ができるようになる(副作用の有無に注意)
29.
Wicketも将来的には… Martijn Dashorst(2015). Apache
Wicket 10 years beyond
30.
参考文献 ・Javaによる関数型プログラミング(ISBN:4873117046) ・Javaプログラマーなら習得しておきたい Java SE
8 実践プログラミング (ISBN:4844336673)
31.
参考文献 ・きつねさんと学ぶ Lambda式&StreamAPIハンズオン http://www.slideshare.net/bitter_fox/handson-50579009 https://bitbucket.org/bitter_fox/lambda.git ・ひしだまのホームページ:Java Stream http://www.ne.jp/asahi/hishidama/home/tech/java/stream.html ・Java8のstreamを使いこなす:きしだのはてな http://d.hatena.ne.jp/nowokay/20130504 ・JavaのStreamで学ぶ遅延処理実装パターン http://www.slideshare.net/mikeneck/javastream ・社内Java8勉強会
ラムダ式とストリームAPI http://www.slideshare.net/zoetrope/java8-lambdaandstream ・Apache Wicket 10 years beyond http://www.slideshare.net/dashorst/wicket-10-years-and-beyond
Download