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
280
それは本当にRailsでないとダメですか?
iwaisatoshi
0
330
Kotlinでテストコードを書く
iwaisatoshi
1
780
Other Decks in Programming
See All in Programming
CSC307 Lecture 02
javiergs
PRO
1
770
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
960
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
170
MUSUBIXとは
nahisaho
0
120
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
260
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
540
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.2k
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.7k
.NET Conf 2025 の興味のあるセッ ションを復習した / dotnet conf 2025 quick recap for backend engineer
tomohisa
0
130
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
110
Basic Architectures
denyspoltorak
0
660
Featured
See All Featured
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
440
Done Done
chrislema
186
16k
It's Worth the Effort
3n
188
29k
Facilitating Awesome Meetings
lara
57
6.7k
Un-Boring Meetings
codingconduct
0
200
Context Engineering - Making Every Token Count
addyosmani
9
640
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
The Curious Case for Waylosing
cassininazir
0
230
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Making Projects Easy
brettharned
120
6.6k
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
ありがとうございました!!