Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Java8のStreamとLambdaの関係
Search
bvlion
July 21, 2017
Programming
0
140
Java8のStreamとLambdaの関係
もうそろそろStreamやLambdaは書けるようになっておきましょう。
bvlion
July 21, 2017
Tweet
Share
More Decks by bvlion
See All by bvlion
View周りで後悔しない実装
iwaisatoshi
0
260
それは本当にRailsでないとダメですか?
iwaisatoshi
0
320
Kotlinでテストコードを書く
iwaisatoshi
1
740
Other Decks in Programming
See All in Programming
明示と暗黙 ー PHPとGoの インターフェイスの違いを知る
shimabox
2
380
High-Level Programming Languages in AI Era -Human Thought and Mind-
hayat01sh1da
PRO
0
570
プロダクト志向なエンジニアがもう一歩先の価値を目指すために意識したこと
nealle
0
110
Benchmark
sysong
0
270
NPOでのDevinの活用
codeforeveryone
0
450
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
20
3.7k
ReadMoreTextView
fornewid
1
480
Rubyでやりたい駆動開発 / Ruby driven development
chobishiba
1
470
童醫院敏捷轉型的實踐經驗
cclai999
0
200
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
510
PostgreSQLのRow Level SecurityをPHPのORMで扱う Eloquent vs Doctrine #phpcon #track2
77web
2
400
エンジニア向け採用ピッチ資料
inusan
0
170
Featured
See All Featured
Practical Orchestrator
shlominoach
188
11k
Become a Pro
speakerdeck
PRO
28
5.4k
BBQ
matthewcrist
89
9.7k
Statistics for Hackers
jakevdp
799
220k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
Agile that works and the tools we love
rasmusluckow
329
21k
The World Runs on Bad Software
bkeepers
PRO
69
11k
Faster Mobile Websites
deanohume
307
31k
Thoughts on Productivity
jonyablonski
69
4.7k
Code Review Best Practice
trishagee
68
18k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Transcript
若干今さら… Java8のStreamとLambda 2017/07/21 @一部の社内向け 岩井 大志
自己紹介 名前 ・岩井 大志(Iwai Satoshi) 高卒遅咲き(26歳から)エンジニア お仕事 ・SE@株式会社クロノス ・JavaやKotlinでWebやAndroidの開発 (予定)
個人の活動 ・Twitter @ninjinx
今日のお題 ⇨ StreamとLambda
今回はザックリ知ってるStreamを、そこそこの理解に もっていくことを目的としています<(_ _)> なのでStreamは少し使ったことがある前提で進めます。。。 細かい質問もあろうかと思いますが、 私も全APIを知ってるとか、めっちゃ詳しいとかでもないので 不明点は一緒に調べたれたら幸いです(^ω^;) ただ、もうリリースされて3年、今年2017年7月には Java9がリリースされる予定なので、 そこそこ理解して使えるようになりましょう(*・ω・)ノ
※ ちなみにJava9のつまみ食いでは、 Lambdaがさらに簡素に書けるようになっています (^w^)
・中間操作 ・map ・filter ・終端操作 ・collect ・forEach ・etc……. Streamにはたくさんの機能があります! と、Lambdaの関係 を、話したいと思います
(*・ω・)ノ
まずはLambdaについて知ろう! Lambdaとは… 私の中でですが、匿名 IFの関数を使ったプログラミングだと思っています。 ・関数型プログラミング ≒ 1つの入力に対し1つの返却値がある (その中で値が変わってしまってはいけない)← レガシーエンジニアがたまにやるオブジェクト参照による値の変更 ・匿名
≒ 無名クラス(インターフェース) つまり、Javaでは 無名クラスで1つずつのInとOutを行うプログラミング と思っておけばいいかと思います (・∀・) これをJava8では簡素に書けるようになりました! ※ あくまでザックリの認識として、言葉尻を気にせずに理解していただければと思います(^ω^;)
Streamのmapとは… mapは典型的なLambdaで、1つの入力(変換結果)に対し、 それを変換して1つの値(Stream)を返してくれます。 StreamはIFですので、定義はこんな感じです(・∀・)
Streamのmapとは… ここで湧き上がる疑問… この引数になってる Functionって何??(・ω・;)
Functionとは… FunctionもIFの1つで、applyで変換を行ってくれます( `・ω・´) これもIFだけど、見ての通り 型引数TをRに変換する …というのは 理解できるかと思います ( `・ω・´)
FunctionをJava7風に実装すると?? Functionクラスを使ってStringをIntegerに変換するとこうなります。
ちょっとダサい(´・ω・`)
FunctionをLambdaで実装してみる! Functionクラスを使ってStringをIntegerに変換するとこうなります。
ちょっと良くなった(・∀・)
1行で返せる場合、括弧を省略できます! このFunctionは こうすることができます。 いわゆる単一式関数ですね(*・ω・)ノ…多分
メソッド参照という機能を使ってみる! Java8のLambdaにはメソッド参照という機能があり「::」で 呼び出すことができます(・∀・) これを こうできます( `・ω・´)
メソッド参照という機能を使ってみる! これらの冗長な部分を … このように置き換えられます。
メソッド参照の指定の仕方 staticメソッド クラス名::メソッド 自クラスメソッド this::メソッド インスタンスメソッド インスタンス::メソッド 引数インスタンス クラス名::メソッド
他のもイメージは 大体こんな感じです(・∀・)
Java7だとこういう感じで書いてたものが Java8のStreamで1行になります! Streamの良さを体感しよう!
検査例外の仕組みの失敗… Java7以前の無名関数を書いてた頃から、元々のメソッドにthrowがなければ 新たにthrowできないことを覚えてらっしゃるでしょうか? 検査例外の仕組みの失敗などと呼ばれ、Javaの仕様ミスの1つです。。。 ただ、Streamの場合は基本機能(forなど)の拡張IFなので、 そうも言ってられません。 そこでUncheckedIOExceptionが定義されました( `・ω・´) Streamを使っててthrowしなければならない場合は、 こちらを使用しましょう(*・ω・)ノ
まとめ ・Lambdaは難しくない ・これに慣れると関数型言語に近づける ・Streamは美しい ・Exceptionだけは気をつけたい Javaはこれからも進化するので、私たちもガンバって 追いついていきましょう( `・ω・´)
ちなみに今回のソースですが… まとめてGistの方に上げてありますので よかったら参考にしてください(*・ω・)ノ https://gist.github.com/bvlion/7984734b70666173f60c287f50a26931
ありがとうございました!!