SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!Ra Zon
 
安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018Hiroshi Tokumaru
 
Spring bootでweb 基本編
Spring bootでweb 基本編Spring bootでweb 基本編
Spring bootでweb 基本編なべ
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよkoji lin
 
はじめてのSpring Boot
はじめてのSpring BootはじめてのSpring Boot
はじめてのSpring Bootなべ
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)Masatoshi Tada
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き土岐 孝平
 
Spring Cloud Netflixを使おう #jsug
Spring Cloud Netflixを使おう #jsugSpring Cloud Netflixを使おう #jsug
Spring Cloud Netflixを使おう #jsugToshiaki Maki
 
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報Takuya Iwatsuka
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 TipsTakaaki Suzuki
 
Laravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するならLaravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するならShohei Okada
 
Micrometerでメトリクスを収集してAmazon CloudWatchで可視化
Micrometerでメトリクスを収集してAmazon CloudWatchで可視化Micrometerでメトリクスを収集してAmazon CloudWatchで可視化
Micrometerでメトリクスを収集してAmazon CloudWatchで可視化Ryosuke Uchitate
 
JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化Satoshi Akama
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント土岐 孝平
 
CloudFrontのリアルタイムログをKibanaで可視化しよう
CloudFrontのリアルタイムログをKibanaで可視化しようCloudFrontのリアルタイムログをKibanaで可視化しよう
CloudFrontのリアルタイムログをKibanaで可視化しようEiji KOMINAMI
 
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Ryosuke Uchitate
 
ステップ・バイ・ステップで学ぶラムダ式・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
 
Spring fest2020 spring-security
Spring fest2020 spring-securitySpring fest2020 spring-security
Spring fest2020 spring-security土岐 孝平
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るGo Miyasaka
 

Mais procurados (20)

磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
 
安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018
 
Spring bootでweb 基本編
Spring bootでweb 基本編Spring bootでweb 基本編
Spring bootでweb 基本編
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
 
はじめてのSpring Boot
はじめてのSpring BootはじめてのSpring Boot
はじめてのSpring Boot
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
 
Spring Cloud Netflixを使おう #jsug
Spring Cloud Netflixを使おう #jsugSpring Cloud Netflixを使おう #jsug
Spring Cloud Netflixを使おう #jsug
 
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
Laravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するならLaravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するなら
 
Micrometerでメトリクスを収集してAmazon CloudWatchで可視化
Micrometerでメトリクスを収集してAmazon CloudWatchで可視化Micrometerでメトリクスを収集してAmazon CloudWatchで可視化
Micrometerでメトリクスを収集してAmazon CloudWatchで可視化
 
JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
 
CloudFrontのリアルタイムログをKibanaで可視化しよう
CloudFrontのリアルタイムログをKibanaで可視化しようCloudFrontのリアルタイムログをKibanaで可視化しよう
CloudFrontのリアルタイムログをKibanaで可視化しよう
 
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
 
Spring fest2020 spring-security
Spring fest2020 spring-securitySpring fest2020 spring-security
Spring fest2020 spring-security
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る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 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
 

Destaque (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(マーケティングオートメーション)初心者運用のススメ
 

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

.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
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...なおき きしだ
 

Semelhante a 60分で体験する Stream / Lambda
 ハンズオン (20)

.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
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
 

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