Enviar pesquisa
Carregar
60分で体験する Stream / Lambda ハンズオン
•
4 gostaram
•
854 visualizações
Hiroto Yamakawa
Seguir
Java Doでしょう #01(8/23 札幌) http://javado.connpass.com/event/18278/
Leia menos
Leia mais
Engenharia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 31
Baixar agora
Baixar para ler offline
Recomendados
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
心 谷本
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイル
なおき きしだ
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
bitter_fox
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
Akihiro Ikezoe
今こそStream API入門
今こそStream API入門
Yuichi Sakuraba
Java8勉強会
Java8勉強会
賢太郎 前多
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
LINE Corporation
Recomendados
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
心 谷本
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイル
なおき きしだ
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
bitter_fox
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
Akihiro Ikezoe
今こそStream API入門
今こそStream API入門
Yuichi Sakuraba
Java8勉強会
Java8勉強会
賢太郎 前多
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
LINE Corporation
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
Ra Zon
安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018
Hiroshi Tokumaru
Spring bootでweb 基本編
Spring bootでweb 基本編
なべ
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
koji lin
はじめてのSpring Boot
はじめてのSpring Boot
なべ
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
Masatoshi Tada
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
土岐 孝平
Spring Cloud Netflixを使おう #jsug
Spring Cloud Netflixを使おう #jsug
Toshiaki Maki
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報
Takuya Iwatsuka
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
Laravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するなら
Shohei Okada
Micrometerでメトリクスを収集してAmazon CloudWatchで可視化
Micrometerでメトリクスを収集してAmazon CloudWatchで可視化
Ryosuke Uchitate
JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化
Satoshi Akama
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
CloudFrontのリアルタイムログをKibanaで可視化しよう
CloudFrontのリアルタイムログをKibanaで可視化しよう
Eiji KOMINAMI
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Ryosuke Uchitate
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
Masatoshi Tada
Spring fest2020 spring-security
Spring fest2020 spring-security
土岐 孝平
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
Go Miyasaka
Apache Wicket and Java EE sitting in a tree
Apache Wicket and Java EE sitting in a tree
Martijn Dashorst
Wicket体験談
Wicket体験談
Hiroto Yamakawa
Mais conteúdo relacionado
Mais procurados
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
Ra Zon
安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018
Hiroshi Tokumaru
Spring bootでweb 基本編
Spring bootでweb 基本編
なべ
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
koji lin
はじめてのSpring Boot
はじめてのSpring Boot
なべ
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
Masatoshi Tada
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
土岐 孝平
Spring Cloud Netflixを使おう #jsug
Spring Cloud Netflixを使おう #jsug
Toshiaki Maki
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報
Takuya Iwatsuka
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
Laravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するなら
Shohei Okada
Micrometerでメトリクスを収集してAmazon CloudWatchで可視化
Micrometerでメトリクスを収集してAmazon CloudWatchで可視化
Ryosuke Uchitate
JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化
Satoshi Akama
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
CloudFrontのリアルタイムログをKibanaで可視化しよう
CloudFrontのリアルタイムログをKibanaで可視化しよう
Eiji KOMINAMI
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Ryosuke Uchitate
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
Masatoshi Tada
Spring fest2020 spring-security
Spring fest2020 spring-security
土岐 孝平
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
Go Miyasaka
Mais procurados
(20)
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018
Spring bootでweb 基本編
Spring bootでweb 基本編
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
はじめてのSpring Boot
はじめてのSpring Boot
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
Spring Cloud Netflixを使おう #jsug
Spring Cloud Netflixを使おう #jsug
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Laravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するなら
Micrometerでメトリクスを収集してAmazon CloudWatchで可視化
Micrometerでメトリクスを収集してAmazon CloudWatchで可視化
JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
CloudFrontのリアルタイムログをKibanaで可視化しよう
CloudFrontのリアルタイムログをKibanaで可視化しよう
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
Spring fest2020 spring-security
Spring fest2020 spring-security
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
Destaque
Apache Wicket and Java EE sitting in a tree
Apache Wicket and Java EE sitting in a tree
Martijn Dashorst
Wicket体験談
Wicket体験談
Hiroto Yamakawa
RESUME
RESUME
Allison Autrey
Java Community Process(JCP)ミーティング
Java Community Process(JCP)ミーティング
関西Javaエンジニアの会
Apache Wicket: Web Applications With Just Java
Apache Wicket: Web Applications With Just Java
Martijn Dashorst
逆戻りデバッグ補助のための嵌入的スパイの試作
逆戻りデバッグ補助のための嵌入的スパイの試作
Kamiya Toshihiro
chat bot framework for Java8
chat bot framework for Java8
masahitojp
地方私立大の助教が Apache Wicketの勉強会を 開いたら
地方私立大の助教が Apache Wicketの勉強会を 開いたら
Hiroto Yamakawa
札幌のJavaコミュニティ Java Doを立ち上げた話
札幌のJavaコミュニティ Java Doを立ち上げた話
Hiroto Yamakawa
プログラミング言語に関する学生へのアンケート
プログラミング言語に関する学生へのアンケート
Hiroto Yamakawa
Mautic導入ポイントと初期設定(Windows+Bitnami Mautic Stack)
Mautic導入ポイントと初期設定(Windows+Bitnami Mautic Stack)
Jun Katayama
WordPress でプロフィールサイトをつくってみた
WordPress でプロフィールサイトをつくってみた
reona396
Wicket with Spring Boot on Azure
Wicket with Spring Boot on Azure
Hiroto Yamakawa
Apache Wicketのユニットテスト機能
Apache Wicketのユニットテスト機能
Hiroto Yamakawa
Lombok ハンズオン
Lombok ハンズオン
Hiroto Yamakawa
kintone アプリ & バーコード活用 & Excel 連携
kintone アプリ & バーコード活用 & Excel 連携
Cybozucommunity
Review the OOCSS
Review the OOCSS
Manabu Yasuda
20160215 04 java ee7徹底入門 jbatch
20160215 04 java ee7徹底入門 jbatch
Jun Inose
The Zillow Zero Marketing Strategy
The Zillow Zero Marketing Strategy
Mautic
MA(マーケティングオートメーション)初心者運用のススメ
MA(マーケティングオートメーション)初心者運用のススメ
miyuki yamada
Destaque
(20)
Apache Wicket and Java EE sitting in a tree
Apache Wicket and Java EE sitting in a tree
Wicket体験談
Wicket体験談
RESUME
RESUME
Java Community Process(JCP)ミーティング
Java Community Process(JCP)ミーティング
Apache Wicket: Web Applications With Just Java
Apache Wicket: Web Applications With Just Java
逆戻りデバッグ補助のための嵌入的スパイの試作
逆戻りデバッグ補助のための嵌入的スパイの試作
chat bot framework for Java8
chat bot framework for Java8
地方私立大の助教が Apache Wicketの勉強会を 開いたら
地方私立大の助教が Apache Wicketの勉強会を 開いたら
札幌のJavaコミュニティ Java Doを立ち上げた話
札幌のJavaコミュニティ Java Doを立ち上げた話
プログラミング言語に関する学生へのアンケート
プログラミング言語に関する学生へのアンケート
Mautic導入ポイントと初期設定(Windows+Bitnami Mautic Stack)
Mautic導入ポイントと初期設定(Windows+Bitnami Mautic Stack)
WordPress でプロフィールサイトをつくってみた
WordPress でプロフィールサイトをつくってみた
Wicket with Spring Boot on Azure
Wicket with Spring Boot on Azure
Apache Wicketのユニットテスト機能
Apache Wicketのユニットテスト機能
Lombok ハンズオン
Lombok ハンズオン
kintone アプリ & バーコード活用 & Excel 連携
kintone アプリ & バーコード活用 & Excel 連携
Review the OOCSS
Review the OOCSS
20160215 04 java ee7徹底入門 jbatch
20160215 04 java ee7徹底入門 jbatch
The Zillow Zero Marketing Strategy
The Zillow Zero Marketing Strategy
MA(マーケティングオートメーション)初心者運用のススメ
MA(マーケティングオートメーション)初心者運用のススメ
Semelhante a 60分で体験する Stream / Lambda ハンズオン
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
信之 岩永
Rの高速化
Rの高速化
弘毅 露崎
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
Takakiyo Tanaka
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
Yoshiiro Ueno
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
Yoshifumi Kawai
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
bitter_fox
マーブル図で怖くないRxJS
マーブル図で怖くないRxJS
bitbank, Inc. Tokyo, Japan
StackStormを活用した運用自動化の実践
StackStormを活用した運用自動化の実践
Shu Sugimoto
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部
NVIDIA Japan
Java8から始める関数型プログラミング
Java8から始める関数型プログラミング
stylefreeslide
Introduction of Python
Introduction of Python
Tomoya Nakayama
ji-2. 計算
ji-2. 計算
kunihikokaneko1
新しい並列for構文のご提案
新しい並列for構文のご提案
yohhoy
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチ
Mr. Vengineer
ji-6. 配列
ji-6. 配列
kunihikokaneko1
Parquetはカラムナなのか?
Parquetはカラムナなのか?
Yohei Azekatsu
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
Preferred Networks
HDCLT
HDCLT
Daigaku Ando
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
なおき きしだ
Semelhante a 60分で体験する Stream / Lambda ハンズオン
(20)
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
Rの高速化
Rの高速化
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
マーブル図で怖くないRxJS
マーブル図で怖くないRxJS
StackStormを活用した運用自動化の実践
StackStormを活用した運用自動化の実践
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部
Java8から始める関数型プログラミング
Java8から始める関数型プログラミング
Introduction of Python
Introduction of Python
ji-2. 計算
ji-2. 計算
新しい並列for構文のご提案
新しい並列for構文のご提案
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチ
ji-6. 配列
ji-6. 配列
Parquetはカラムナなのか?
Parquetはカラムナなのか?
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
HDCLT
HDCLT
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
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
Baixar agora