SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
60分で体験する

Stream / Lambda

ハンズオン
gishi_yama
• 某地方大学でeラーニングなどの情報システムの

開発・研究に従事
• Wicket-Sapporo, Java Do ← New!
• Wicket User Guideの翻訳にチャレンジ中
https://github.com/wicket-sapporo/wicket_user_guide_jp
ハンズオンの概要
Java 8のリリースから1年あまりが経過し、Stream
APIやLambda 式が開発環境に導入される事例も次第
に増えてきていることと思います。
Stream APIやLamda式のしくみ・書き方・ルールの
基本と、これらを用いて既存のJavaコードをどう変
化させることができるのか、体験してみましょう。
3
練習・演習プロジェクト
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 に記載されている
Stream / Lambda
Javaに細かい並列処理を導入するため、Java8から導
入されたAPIや記法のこと
• Stream:

配列、List、Set、Mapといったコレクション的な
オブジェクトへの順次・並列処理を記述するAPI
• Lambda:

匿名の関数オブジェクトを作るための関数型イン
ターフェースの実装(とその記法)
5
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
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


‣ ages を要素数分繰り返す
‣ iを要素番号として、agesから要素を取り出す
‣ 取り出した要素を表示する
‣ agesをstreamにする
‣ streamの要素nをSystem.out.println(n)で表示する
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
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


‣ ages を要素数分繰り返す
‣ iを要素番号として、agesから要素:nを取り出す
‣ nが20以上の時だけ、下を実行する
‣ nを表示する
‣ argsをStreamにする
‣ streamの要素nが20以上のものだけにフィルタする
‣ 残った要素nを表示する
練習1を
やってみましょう
12
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
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
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
Lambda式
・n	
  -­‐>	
  n	
  >=	
  20	
  
・n	
  -­‐>	
  Integer.toBinaryString(n)	
  
・n	
  -­‐>	
  System.out.println(n)
Streamの中に現れた
これらが Lambda(ラムダ)式。
ラムダ式は、 式 の様に処理(関数)を書ける
「関数オブジェクト」
Javaでは、関数型インターフェースの無名クラスが原型
無名クラス
インスタンス化の際に{}をつけることで、サブクラスやインター
フェースの実装クラスのオブジェクトをその場で作ることができる。
このサブクラスには、クラス名がない。
この手法(と、作られたクラス)を無名クラスという。
public	
  class	
  GamePlayer	
  extends	
  AbstractPlayer	
  {	
  
	
  	
  //	
  AbstractPlayerのサブクラス
	
  	
  //	
  このサブクラスには GamePlayer というクラス名前がある	
  
}
AbstractPlayer	
  player	
  =	
  new	
  AbstractPlayer()	
  {	
  
	
  	
  //	
  このオブジェクトは、AbstractPlayerのサブクラスのオブジェクトとなる
	
  	
  //	
  サブクラスにはクラス名が存在しないので、無名クラスと呼ばれる	
  
};
↓通常のサブクラス↑無名クラス
関数型インターフェース










18
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の無名クラス
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); 
無名クラスからラムダ式へ
int[]	
  ages	
  =	
  new	
  int[]{22,	
  10,	
  19,	
  38};	
  
IntConsumer	
  consumer	
  =	
  
	
  n	
  -­‐>	
  System.out.println(n);	
  
	
  	
  
Arrays.stream(ages)	
  
	
  	
  	
  	
  	
  	
  .forEach(consumer); 
ラムダ式
int[]	
  ages	
  =	
  new	
  int[]{22,	
  10,	
  19,	
  38};	
  
IntConsumer	
  consumer	
  =	
  
	
  n	
  -­‐>	
  System.out.println(n);	
  
Arrays.stream(ages)	
  
	
  	
  	
  	
  	
  	
  .forEach(n	
  -­‐>	
  System.out.println(n)); 
引数に直接渡す
アロー演算子の左辺が複数行
になるときは{}で囲む
int[]	
  ages	
  =	
  new	
  int[]{22,	
  10,	
  19,	
  38};	
  
Arrays.stream(ages)	
  
	
  	
  .forEach(n	
  -­‐>	
  {	
  
	
  	
  	
  	
  String	
  s	
  =	
  n	
  +	
  "歳";	
  
	
  	
  	
  	
  System.out.println(s);	
  
	
  	
  });	
  
練習2
演習1∼10を
やってみましょう
24
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);
メソッド参照
ラムダ式の部分を
オブジェクト::メソッド名
クラス::メソッド名
に書き換えられる(引数も推測される)
副作用は(極力)避ける
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
まとめ
Stream:	
  コレクション的なオブジェクトへの順次・並列
処理をパイプラインで記述できる	
  
Lambda:	
  関数型インターフェースの実装(Stream内で

処理させたい内容など)を式やメソッド参照で書ける	
  
Stream	
  API	
  /	
  Lambdaを使うことで、for文を使う処理

をより明確に・簡素に書ける	
  
streamをparallel化するだけで並列処理を行わせること
ができるようになる(副作用の有無に注意)
Wicketも将来的には…
Martijn Dashorst(2015). Apache Wicket 10 years beyond
参考文献
・Javaによる関数型プログラミング(ISBN:4873117046)
・Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング
(ISBN:4844336673)
参考文献
・きつねさんと学ぶ 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

Weitere ähnliche Inhalte

Was ist angesagt?

Uart受信設計2013
Uart受信設計2013Uart受信設計2013
Uart受信設計2013Kiyoshi Ogawa
 
JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化Satoshi Akama
 
20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdfKazuaki Ishizaki
 
Rust で RTOS を考える
Rust で RTOS を考えるRust で RTOS を考える
Rust で RTOS を考えるryuz88
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよkoji lin
 
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係Mr. Vengineer
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかYahoo!デベロッパーネットワーク
 
データベースシステム論10 - データベースの設計
データベースシステム論10 - データベースの設計データベースシステム論10 - データベースの設計
データベースシステム論10 - データベースの設計Shohei Yokoyama
 
OpenAI FineTuning を試してみる
OpenAI FineTuning を試してみるOpenAI FineTuning を試してみる
OpenAI FineTuning を試してみるiPride Co., Ltd.
 
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3までYahoo!デベロッパーネットワーク
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
入門core.async
入門core.async入門core.async
入門core.asyncsohta
 
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
心理的安全性の構造 デブサミ2019夏 structure of psychological safety心理的安全性の構造 デブサミ2019夏 structure of psychological safety
心理的安全性の構造 デブサミ2019夏 structure of psychological safetyTokoroten Nakayama
 
Getting Started with SDR in Python
Getting Started with SDR in PythonGetting Started with SDR in Python
Getting Started with SDR in PythonTaisuke Yamada
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
パタン・ランゲージを用いてスクラムの本質をひもとく
パタン・ランゲージを用いてスクラムの本質をひもとくパタン・ランゲージを用いてスクラムの本質をひもとく
パタン・ランゲージを用いてスクラムの本質をひもとくMinoru Yokomichi
 

Was ist angesagt? (20)

Uart受信設計2013
Uart受信設計2013Uart受信設計2013
Uart受信設計2013
 
JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化
 
20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf
 
Rust で RTOS を考える
Rust で RTOS を考えるRust で RTOS を考える
Rust で RTOS を考える
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
 
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
 
データベースシステム論10 - データベースの設計
データベースシステム論10 - データベースの設計データベースシステム論10 - データベースの設計
データベースシステム論10 - データベースの設計
 
OpenAI FineTuning を試してみる
OpenAI FineTuning を試してみるOpenAI FineTuning を試してみる
OpenAI FineTuning を試してみる
 
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
入門core.async
入門core.async入門core.async
入門core.async
 
GraphQL入門
GraphQL入門GraphQL入門
GraphQL入門
 
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
心理的安全性の構造 デブサミ2019夏 structure of psychological safety心理的安全性の構造 デブサミ2019夏 structure of psychological safety
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
 
Getting Started with SDR in Python
Getting Started with SDR in PythonGetting Started with SDR in Python
Getting Started with SDR in Python
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
パタン・ランゲージを用いてスクラムの本質をひもとく
パタン・ランゲージを用いてスクラムの本質をひもとくパタン・ランゲージを用いてスクラムの本質をひもとく
パタン・ランゲージを用いてスクラムの本質をひもとく
 
GPT凄くね?
GPT凄くね?GPT凄くね?
GPT凄くね?
 
Code Golf
Code GolfCode Golf
Code Golf
 
WebRTCとSFU
WebRTCとSFUWebRTCとSFU
WebRTCとSFU
 

Andere mochten auch

Apache Wicket and Java EE sitting in a tree
Apache Wicket and Java EE sitting in a treeApache Wicket and Java EE sitting in a tree
Apache Wicket and Java EE sitting in a treeMartijn Dashorst
 
Apache Wicket: Web Applications With Just Java
Apache Wicket: Web Applications With Just JavaApache Wicket: Web Applications With Just Java
Apache Wicket: Web Applications With Just JavaMartijn Dashorst
 
逆戻りデバッグ補助のための嵌入的スパイの試作
逆戻りデバッグ補助のための嵌入的スパイの試作逆戻りデバッグ補助のための嵌入的スパイの試作
逆戻りデバッグ補助のための嵌入的スパイの試作Kamiya Toshihiro
 
chat bot framework for Java8
chat bot framework for Java8chat bot framework for Java8
chat bot framework for Java8masahitojp
 
地方私立大の助教が Apache Wicketの勉強会を
開いたら
地方私立大の助教が Apache Wicketの勉強会を
開いたら地方私立大の助教が Apache Wicketの勉強会を
開いたら
地方私立大の助教が Apache Wicketの勉強会を
開いたらHiroto Yamakawa
 
札幌のJavaコミュニティ Java Doを立ち上げた話
札幌のJavaコミュニティ Java Doを立ち上げた話札幌のJavaコミュニティ Java Doを立ち上げた話
札幌のJavaコミュニティ Java Doを立ち上げた話Hiroto Yamakawa
 
プログラミング言語に関する学生へのアンケート
プログラミング言語に関する学生へのアンケートプログラミング言語に関する学生へのアンケート
プログラミング言語に関する学生へのアンケートHiroto Yamakawa
 
Mautic導入ポイントと初期設定(Windows+Bitnami Mautic Stack)
Mautic導入ポイントと初期設定(Windows+Bitnami Mautic Stack)Mautic導入ポイントと初期設定(Windows+Bitnami Mautic Stack)
Mautic導入ポイントと初期設定(Windows+Bitnami Mautic Stack)Jun Katayama
 
WordPress でプロフィールサイトをつくってみた
WordPress でプロフィールサイトをつくってみたWordPress でプロフィールサイトをつくってみた
WordPress でプロフィールサイトをつくってみたreona396
 
Wicket with Spring Boot on Azure
Wicket with Spring Boot on AzureWicket with Spring Boot on Azure
Wicket with Spring Boot on AzureHiroto Yamakawa
 
Apache Wicketのユニットテスト機能
Apache Wicketのユニットテスト機能Apache Wicketのユニットテスト機能
Apache Wicketのユニットテスト機能Hiroto Yamakawa
 
kintone アプリ & バーコード活用 & Excel 連携
kintone アプリ & バーコード活用 & Excel 連携kintone アプリ & バーコード活用 & Excel 連携
kintone アプリ & バーコード活用 & Excel 連携Cybozucommunity
 
20160215 04 java ee7徹底入門 jbatch
20160215 04 java ee7徹底入門 jbatch20160215 04 java ee7徹底入門 jbatch
20160215 04 java ee7徹底入門 jbatchJun Inose
 
The Zillow Zero Marketing Strategy
The Zillow Zero Marketing StrategyThe Zillow Zero Marketing Strategy
The Zillow Zero Marketing StrategyMautic
 
MA(マーケティングオートメーション)初心者運用のススメ
MA(マーケティングオートメーション)初心者運用のススメ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 treeApache Wicket and Java EE sitting in a tree
Apache Wicket and Java EE sitting in a tree
 
Wicket体験談
Wicket体験談Wicket体験談
Wicket体験談
 
RESUME
RESUMERESUME
RESUME
 
Java Community Process(JCP)ミーティング
Java Community Process(JCP)ミーティングJava Community Process(JCP)ミーティング
Java Community Process(JCP)ミーティング
 
Apache Wicket: Web Applications With Just Java
Apache Wicket: Web Applications With Just JavaApache Wicket: Web Applications With Just Java
Apache Wicket: Web Applications With Just Java
 
逆戻りデバッグ補助のための嵌入的スパイの試作
逆戻りデバッグ補助のための嵌入的スパイの試作逆戻りデバッグ補助のための嵌入的スパイの試作
逆戻りデバッグ補助のための嵌入的スパイの試作
 
chat bot framework for Java8
chat bot framework for Java8chat bot framework for Java8
chat bot framework for Java8
 
地方私立大の助教が Apache Wicketの勉強会を
開いたら
地方私立大の助教が Apache Wicketの勉強会を
開いたら地方私立大の助教が Apache Wicketの勉強会を
開いたら
地方私立大の助教が Apache Wicketの勉強会を
開いたら
 
札幌のJavaコミュニティ Java Doを立ち上げた話
札幌のJavaコミュニティ Java Doを立ち上げた話札幌のJavaコミュニティ Java Doを立ち上げた話
札幌のJavaコミュニティ Java Doを立ち上げた話
 
プログラミング言語に関する学生へのアンケート
プログラミング言語に関する学生へのアンケートプログラミング言語に関する学生へのアンケート
プログラミング言語に関する学生へのアンケート
 
Mautic導入ポイントと初期設定(Windows+Bitnami Mautic Stack)
Mautic導入ポイントと初期設定(Windows+Bitnami Mautic Stack)Mautic導入ポイントと初期設定(Windows+Bitnami Mautic Stack)
Mautic導入ポイントと初期設定(Windows+Bitnami Mautic Stack)
 
WordPress でプロフィールサイトをつくってみた
WordPress でプロフィールサイトをつくってみたWordPress でプロフィールサイトをつくってみた
WordPress でプロフィールサイトをつくってみた
 
Wicket with Spring Boot on Azure
Wicket with Spring Boot on AzureWicket with Spring Boot on Azure
Wicket with Spring Boot on Azure
 
Apache Wicketのユニットテスト機能
Apache Wicketのユニットテスト機能Apache Wicketのユニットテスト機能
Apache Wicketのユニットテスト機能
 
Lombok ハンズオン
Lombok ハンズオンLombok ハンズオン
Lombok ハンズオン
 
kintone アプリ & バーコード活用 & Excel 連携
kintone アプリ & バーコード活用 & Excel 連携kintone アプリ & バーコード活用 & Excel 連携
kintone アプリ & バーコード活用 & Excel 連携
 
Review the OOCSS
Review the OOCSSReview the OOCSS
Review the OOCSS
 
20160215 04 java ee7徹底入門 jbatch
20160215 04 java ee7徹底入門 jbatch20160215 04 java ee7徹底入門 jbatch
20160215 04 java ee7徹底入門 jbatch
 
The Zillow Zero Marketing Strategy
The Zillow Zero Marketing StrategyThe Zillow Zero Marketing Strategy
The Zillow Zero Marketing Strategy
 
MA(マーケティングオートメーション)初心者運用のススメ
MA(マーケティングオートメーション)初心者運用のススメMA(マーケティングオートメーション)初心者運用のススメ
MA(マーケティングオートメーション)初心者運用のススメ
 

Ähnlich wie 60分で体験する Stream / Lambda
 ハンズオン

ステップ・バイ・ステップで学ぶラムダ式・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
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#信之 岩永
 
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-Takakiyo Tanaka
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)啓 小笠原
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.jsYoshiiro Ueno
 
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単にReactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単にYoshifumi Kawai
 
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!bitter_fox
 
StackStormを活用した運用自動化の実践
StackStormを活用した運用自動化の実践StackStormを活用した運用自動化の実践
StackStormを活用した運用自動化の実践Shu Sugimoto
 
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部NVIDIA Japan
 
Java8から始める関数型プログラミング
Java8から始める関数型プログラミングJava8から始める関数型プログラミング
Java8から始める関数型プログラミングstylefreeslide
 
新しい並列for構文のご提案
新しい並列for構文のご提案新しい並列for構文のご提案
新しい並列for構文のご提案yohhoy
 
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチZynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチMr. Vengineer
 
Parquetはカラムナなのか?
Parquetはカラムナなのか?Parquetはカラムナなのか?
Parquetはカラムナなのか?Yohei Azekatsu
 

Ähnlich wie 60分で体験する Stream / Lambda
 ハンズオン (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
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
 
Rの高速化
Rの高速化Rの高速化
Rの高速化
 
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
 
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単にReactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
 
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
 
マーブル図で怖くないRxJS
マーブル図で怖くないRxJSマーブル図で怖くないRxJS
マーブル図で怖くないRxJS
 
StackStormを活用した運用自動化の実践
StackStormを活用した運用自動化の実践StackStormを活用した運用自動化の実践
StackStormを活用した運用自動化の実践
 
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部
 
Java8から始める関数型プログラミング
Java8から始める関数型プログラミングJava8から始める関数型プログラミング
Java8から始める関数型プログラミング
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
ji-2. 計算
ji-2. 計算ji-2. 計算
ji-2. 計算
 
新しい並列for構文のご提案
新しい並列for構文のご提案新しい並列for構文のご提案
新しい並列for構文のご提案
 
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチZynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチ
 
ji-6. 配列
ji-6. 配列ji-6. 配列
ji-6. 配列
 
Parquetはカラムナなのか?
Parquetはカラムナなのか?Parquetはカラムナなのか?
Parquetはカラムナなのか?
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
HDCLT
HDCLTHDCLT
HDCLT
 

60分で体験する Stream / Lambda
 ハンズオン