Suche senden
Hochladen
60分で体験する Stream / Lambda ハンズオン
•
4 gefällt mir
•
854 views
Hiroto Yamakawa
Folgen
Java Doでしょう #01(8/23 札幌) http://javado.connpass.com/event/18278/
Weniger lesen
Mehr lesen
Ingenieurwesen
Melden
Teilen
Melden
Teilen
1 von 31
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイル
なおき きしだ
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
心 谷本
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
bitter_fox
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
Ra Zon
今こそStream API入門
今こそStream API入門
Yuichi Sakuraba
東方紅魔郷AI
東方紅魔郷AI
aki33524
組み合わせテストの設計(PictMaster勉強会) 2008年7月17日
組み合わせテストの設計(PictMaster勉強会) 2008年7月17日
Keizo Tatsumi
基礎線形代数講座
基礎線形代数講座
SEGADevTech
Empfohlen
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイル
なおき きしだ
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
心 谷本
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
bitter_fox
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
Ra Zon
今こそStream API入門
今こそStream API入門
Yuichi Sakuraba
東方紅魔郷AI
東方紅魔郷AI
aki33524
組み合わせテストの設計(PictMaster勉強会) 2008年7月17日
組み合わせテストの設計(PictMaster勉強会) 2008年7月17日
Keizo Tatsumi
基礎線形代数講座
基礎線形代数講座
SEGADevTech
Uart受信設計2013
Uart受信設計2013
Kiyoshi Ogawa
JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化
Satoshi Akama
20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
koji lin
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Mr. Vengineer
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
Yahoo!デベロッパーネットワーク
データベースシステム論10 - データベースの設計
データベースシステム論10 - データベースの設計
Shohei Yokoyama
OpenAI FineTuning を試してみる
OpenAI FineTuning を試してみる
iPride Co., Ltd.
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
Yahoo!デベロッパーネットワーク
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
入門core.async
入門core.async
sohta
GraphQL入門
GraphQL入門
Kent Ohashi
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
Tokoroten Nakayama
Getting Started with SDR in Python
Getting Started with SDR in Python
Taisuke Yamada
例外設計における大罪
例外設計における大罪
Takuto Wada
パタン・ランゲージを用いてスクラムの本質をひもとく
パタン・ランゲージを用いてスクラムの本質をひもとく
Minoru Yokomichi
GPT凄くね?
GPT凄くね?
Ryohei Kuroki
Code Golf
Code Golf
Shinichiro Hamaji
WebRTCとSFU
WebRTCとSFU
Saki Homma
Apache Wicket and Java EE sitting in a tree
Apache Wicket and Java EE sitting in a tree
Martijn Dashorst
Wicket体験談
Wicket体験談
Hiroto Yamakawa
Weitere ähnliche Inhalte
Was ist angesagt?
Uart受信設計2013
Uart受信設計2013
Kiyoshi Ogawa
JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化
Satoshi Akama
20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
koji lin
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Mr. Vengineer
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
Yahoo!デベロッパーネットワーク
データベースシステム論10 - データベースの設計
データベースシステム論10 - データベースの設計
Shohei Yokoyama
OpenAI FineTuning を試してみる
OpenAI FineTuning を試してみる
iPride Co., Ltd.
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
Yahoo!デベロッパーネットワーク
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
入門core.async
入門core.async
sohta
GraphQL入門
GraphQL入門
Kent Ohashi
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
Tokoroten Nakayama
Getting Started with SDR in Python
Getting Started with SDR in Python
Taisuke Yamada
例外設計における大罪
例外設計における大罪
Takuto Wada
パタン・ランゲージを用いてスクラムの本質をひもとく
パタン・ランゲージを用いてスクラムの本質をひもとく
Minoru Yokomichi
GPT凄くね?
GPT凄くね?
Ryohei Kuroki
Code Golf
Code Golf
Shinichiro Hamaji
WebRTCとSFU
WebRTCとSFU
Saki Homma
Was ist angesagt?
(20)
Uart受信設計2013
Uart受信設計2013
JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化
20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf
Rust で RTOS を考える
Rust で RTOS を考える
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
データベースシステム論10 - データベースの設計
データベースシステム論10 - データベースの設計
OpenAI FineTuning を試してみる
OpenAI FineTuning を試してみる
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
入門core.async
入門core.async
GraphQL入門
GraphQL入門
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
Getting Started with SDR in Python
Getting Started with SDR in Python
例外設計における大罪
例外設計における大罪
パタン・ランゲージを用いてスクラムの本質をひもとく
パタン・ランゲージを用いてスクラムの本質をひもとく
GPT凄くね?
GPT凄くね?
Code Golf
Code Golf
WebRTCとSFU
WebRTCとSFU
Andere mochten auch
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
Andere mochten auch
(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(マーケティングオートメーション)初心者運用のススメ
Ähnlich wie 60分で体験する Stream / Lambda ハンズオン
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
Masatoshi Tada
.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
Ähnlich wie 60分で体験する Stream / Lambda ハンズオン
(20)
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
.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
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
Jetzt herunterladen