Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Java8のStreamとLambdaの関係
Search
bvlion
July 21, 2017
Programming
160
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Java8のStreamとLambdaの関係
もうそろそろStreamやLambdaは書けるようになっておきましょう。
bvlion
July 21, 2017
More Decks by bvlion
See All by bvlion
View周りで後悔しない実装
iwaisatoshi
0
290
それは本当にRailsでないとダメですか?
iwaisatoshi
0
350
Kotlinでテストコードを書く
iwaisatoshi
1
810
Other Decks in Programming
See All in Programming
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5.1k
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
250
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
170
dotNET_vulnclicker_intro.pdf
deka_morita
0
140
The Rails Doctrine Decade
koic
2
570
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
370
プロダクトコードからライブラリの境界を見つける
elmetal
PRO
0
120
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
740
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
22
22k
mrbgem 三角測量 開発
ogom
0
240
Are APIs Still Relevant in the AI Era?
soyuka
0
460
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
4.9k
Featured
See All Featured
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
450
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
490
Building AI with AI
inesmontani
PRO
1
1.3k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
620
GitHub's CSS Performance
jonrohan
1033
470k
Utilizing Notion as your number one productivity tool
mfonobong
4
620
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
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
ありがとうございました!!